Clock offset (exif_time_infront_real_time) is not applied to Experiment_Time[s]
维护者通常 1 天内回复
评估
调研方向
从 ledsa/data_extraction/init_functions.py 中的 _calc_experiment_and_real_time 开始,并将其时间计算与 ledsa/core/ConfigData.py 中的 ConfigData.get_start_time 进行比较。为以下情况添加回归测试:第一张图像的 start_time 来自其 EXIF 时间,以及两台偏移量不同的相机。完成标准是这两种情况都生成预期的实验共享时间轴;更新配置文档,说明手动设置的 start_time 使用实际时钟时间。
由索引模型根据 Issue 内容生成。
描述
Problem
The camera clock offset exif_time_infront_real_time is only applied to Time[s]. It never reaches Experiment_Time[s].
ConfigData.get_start_timemovesstart_timeonto the real clock: it subtracts the offset from the EXIF time of the first image (ConfigData.py#L494)._calc_experiment_and_real_timethen measures the experiment time from the uncorrected EXIF time (init_functions.py#L130):
experiment_time = date_time_img - config.get_datetime() # camera clock − real clock
...
time = date_time_img - timedelta(seconds=time_diff) # only Time[s] is corrected
So every Experiment_Time[s] is off by exif_time_infront_real_time.
Effects
- One camera: every time moves by the same amount. When
start_timecomes from the first image, that image sits at t = offset instead of 0. A temperature reduction table built on the lab clock is read that many seconds off. - Several cameras: the stacked analysis matches the cameras by
Experiment_Time[s](_load_time_map→read_experiment_times, StackedExtinctionCoefficients.py#L575). Their time axes stay apart by the difference of their offsets, which is the gap the clock photos were meant to remove.
Reproduction
Camera clock 30 s ahead, one image every 10 s, start_time left to be read from image 1 (EXIF times faked):
start_time = 12:00:00
#Count,Name,Time[s],Experiment_Time[s]
1,img0001.jpg,12:00:00.000,30.0
2,img0002.jpg,12:00:10.000,40.0
3,img0003.jpg,12:00:20.000,50.0
Time[s] of image 1 equals start_time, yet its experiment time is 30 s.
Suggested fix
Measure the experiment time from the corrected time, the same way start_time is computed:
date_time_img = get_exif_datetime(img_path, tag)
- experiment_time = date_time_img - config.get_datetime()
- experiment_time = experiment_time.total_seconds()
time_diff = config.getfloat(build_type, 'exif_time_infront_real_time')
time = date_time_img - timedelta(seconds=time_diff)
+ # start_time is on the real clock, so the experiment time is measured from the corrected image time
+ experiment_time = (time - config.get_datetime()).total_seconds()
return experiment_time, time
With this change the reproduction gives 0, 10, 20 s, and the existing unit tests (370) still pass. A regression test should cover two cases:
- With
start_timederived from the first image, that image is at 0. - Two cameras with offsets of +30 s and −5 s and the same
start_timegive the same experiment times.
Things to note
- Semantics of a hand-set
start_time: after the fix,start_timeis read as a real-clock (lab) time, as it already is when LEDSA derives it. The config docs should say so explicitly. - Existing results:
image_infos*.csvwritten before the fix, and everything built on them, are shifted by the offset. They must be regenerated, and so must any temperature reduction table that was aligned to the old axis. The demo hastime_diff_to_image_time = -1, so its times move by 1 s. - Multi-camera, out of scope here: even after the fix, cameras share a time axis only when their
start_timeis the same real time. If each camera derivesstart_timefrom its own first image, the axes still differ by the gap between those first images. It may be worth a check or a warning in the stacked analysis.
- 主要语言
- Python
- 星标
- 7
- 派生
- 4
- 平均合并
- 3 小时 58 分钟
- 30 天内合并 PR
- 35
环境准备
这个项目没有提供开发容器、Dockerfile 或贡献指南,环境需要你自己搭建:先看它的 README,通用步骤见我们的新手贡献指南。
从这里开始
- 先读完整个 Issue,再读项目的贡献指南。
- 在 Issue 下留言说明你要接手 —— 这能避免两个人做同样的事。
- Fork 仓库,在一个分支上完成修改。
- 提交 Pull Request,并在描述里引用这个 Issue 编号。
FireDynamics/LEDSmokeAnalysis 的其他 Issue
-
-s3_fast with -r, -g or -b also runs the full step 3 with LED fits可能已有人在做 @imshah-id 今天认领。 未关闭bug
难度 2/5 1-3 小时 新手友好度 84/100
FireDynamics/LEDSmokeAnalysis#176 ·
维护者通常 1 天内回复
-
难度 2/5 1-3 小时 新手友好度 78/100
FireDynamics/LEDSmokeAnalysis#175 ·
维护者通常 1 天内回复
-
bug
难度 4/5 3-5 天 新手友好度 55/100
FireDynamics/LEDSmokeAnalysis#177 ·
维护者通常 1 天内回复
-
难度 5/5 一周以上 新手友好度 15/100
FireDynamics/LEDSmokeAnalysis#98 ·
维护者通常 1 天内回复
-
enhancement
难度 3/5 1-2 天 新手友好度 25/100
FireDynamics/LEDSmokeAnalysis#91 ·
维护者通常 1 天内回复
查看 FireDynamics/LEDSmokeAnalysis 的全部 Issue
相似的 Issue
-
Status: Triage Type: Quest
难度 2/5 1-3 小时 新手友好度 66/100
GTNewHorizons/GT-New-Horizons-Modpack#27490 ·
维护者通常 1 天内回复
-
Bug
难度 2/5 1-3 小时 新手友好度 72/100
维护者通常 1 天内回复
-
bug
难度 2/5 1-3 小时 新手友好度 82/100
retentioneering/retentioneering-tools#231 ·
维护者通常 1 天内回复
-
backend bug documentation
难度 2/5 1-3 小时 新手友好度 78/100
geolens-io/geolens#3568 ·
维护者通常 1 天内回复
-
enhancement
难度 1/5 1 小时以内 新手友好度 88/100
mprov-ng/mprov_control_center#450 ·
维护者通常 1 天内回复