feat: display.txt 传递原子半径数组,draw.py 读取 per-atom 半径
之前所有原子使用统一的 ball_radius(来自 input.txt), 现在 display.txt header 包含 atom_radii 字段(逗号分隔 的半径数组),draw.py 据此为每个原子设置独立半径。 fallback:若没有 atom_radii 字段,仍使用 ball_radius。
This commit is contained in:
+2
-1
@@ -1460,7 +1460,8 @@ def run_simulation(save_trajectory=0):
|
||||
"gravity_strength": str(GRAVITY_STRENGTH),
|
||||
"driving_force": str(DRIVING_FORCE),
|
||||
"use_marker": str(use_marker),
|
||||
"alpha": ",".join(str(a) for a in (alpha if isinstance(alpha, list) else [alpha]))}
|
||||
"alpha": ",".join(str(a) for a in (alpha if isinstance(alpha, list) else [alpha])),
|
||||
"atom_radii": ",".join(str(r) for r in ATOM_RADII)}
|
||||
)
|
||||
print(f"[compute] display.txt 已保存至: {disp_path} ({n_frames_actual} 帧)")
|
||||
|
||||
|
||||
@@ -67,7 +67,12 @@ DISP_T = DISP_STEP * DT
|
||||
|
||||
# 原子信息
|
||||
ATOM_IDS = disp_data["atom_ids"]
|
||||
ATOM_RADII = np.full(N_ATOMS, float(h.get("ball_radius", 0.5)))
|
||||
# 优先使用 per-atom 半径,否则用统一的 ball_radius
|
||||
_raw_radii = h.get("atom_radii", "")
|
||||
if _raw_radii.strip():
|
||||
ATOM_RADII = np.array([float(x) for x in _raw_radii.split(",")])
|
||||
else:
|
||||
ATOM_RADII = np.full(N_ATOMS, float(h.get("ball_radius", 0.5)))
|
||||
PLOT_ATOM_ROW = 0
|
||||
PLOT_ATOM_ID = int(ATOM_IDS[0])
|
||||
BOND_PAIRS = [] # display 格式不含成键信息,从原始数据加载
|
||||
|
||||
+2
-1
@@ -253,7 +253,8 @@ def run_case(config_path, runtime_base, input_dir="input", output_dir="output",
|
||||
"gravity_strength": str(data.get("gravity_strength", 1.0)),
|
||||
"driving_force": str(data.get("driving_force", 0)),
|
||||
"use_marker": str(config.get("use_marker", 0)),
|
||||
"alpha": _fmt_alpha(data.get("alpha", 0.2))}
|
||||
"alpha": _fmt_alpha(data.get("alpha", 0.2)),
|
||||
"atom_radii": _fmt_alpha(data.get("atom_radii", []))}
|
||||
|
||||
n_frames = len(indices)
|
||||
compute.save_display_txt(
|
||||
|
||||
Reference in New Issue
Block a user