修复了能量和信号幅度的转换关系

main
18210258040 2026-03-13 15:01:44 +08:00
parent f3d316ab52
commit 0d655f077d
9 changed files with 11624 additions and 58068 deletions

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

Binary file not shown.

File diff suppressed because it is too large Load Diff

File diff suppressed because it is too large Load Diff

View File

@ -712,6 +712,24 @@ class DataWriterV4:
f.write("# 8个信号为一组每组内从后往前导出逆序排列: 8,7,6,5,4,3,2,1, 16,15...\n")
f.write("# 格式: 事件ID | 组内序号 | 十六进制编码 | 解析结果\n")
f.write(f"# 能量转换: mV = keV × {self.energy_K} + {self.energy_B}\n")
# 写入模拟参数
f.write("#\n")
f.write("# 模拟参数:\n")
# 同步脉冲参数
sync_pulses = self.config.get('simulation', {}).get('sync_pulses', [])
for i, pulse in enumerate(sync_pulses, 1):
count = pulse.get('count', 0)
period = pulse.get('period', 0)
f.write(f"# 同步脉冲{i}: 个数={count}, 周期={period} (10ns)\n")
# 能量和AD转换参数
energy_conversion = self.config.get('simulation', {}).get('energy_conversion', {})
energy_K = energy_conversion.get('K', 1.0)
energy_B = energy_conversion.get('B', 0.0)
f.write(f"# 能量转换参数: K={energy_K}, B={energy_B} (mV = keV × K + B)\n")
f.write("#" * 120 + "\n")
for event_idx, event_signals in enumerate(all_events):
@ -1164,6 +1182,24 @@ class DataWriterV4:
f.write("# 注: 能量为0的探测器不显示\n")
f.write("#" * 120 + "\n\n")
# 写入模拟参数
f.write("#\n")
f.write("# 模拟参数:\n")
# 同步脉冲参数
sync_pulses = self.config.get('simulation', {}).get('sync_pulses', [])
for i, pulse in enumerate(sync_pulses, 1):
count = pulse.get('count', 0)
period = pulse.get('period', 0)
f.write(f"# 同步脉冲{i}: 个数={count}, 周期={period} (10ns)\n")
# 能量和AD转换参数
energy_conversion = self.config.get('simulation', {}).get('energy_conversion', {})
energy_K = energy_conversion.get('K', 1.0)
energy_B = energy_conversion.get('B', 0.0)
f.write(f"# 能量转换参数: K={energy_K}, B={energy_B} (mV = keV × K + B)\n")
f.write("#" * 120 + "\n\n")
total_signals = len(encoded_signals)
# 预先计算每个信号对应的事件ID
@ -1202,13 +1238,13 @@ class DataWriterV4:
# 构建信号描述只显示能量不为0的探测器
signal_desc = []
if energies[0] > 0:
det1_kev = energies[0] / 2.0 # 假设K=2.0
det1_kev = (energies[0] - self.energy_B) / self.energy_K if self.energy_K != 0 else 0
signal_desc.append(f"Det1:{det1_kev:.0f}keV")
if energies[1] > 0:
det2_kev = energies[1] / 2.0
det2_kev = (energies[1] - self.energy_B) / self.energy_K if self.energy_K != 0 else 0
signal_desc.append(f"Det2:{det2_kev:.0f}keV")
if energies[2] > 0:
det3_kev = energies[2] / 2.0
det3_kev = (energies[2] - self.energy_B) / self.energy_K if self.energy_K != 0 else 0
signal_desc.append(f"Det3:{det3_kev:.0f}keV")
# 如果没有探测器有能量,显示无信号

View File

@ -2,9 +2,8 @@ detectors:
detector1:
allow_replacement: true
energy_distribution:
high: 2000.0
low: 1000.0
type: uniform
type: constant
value: 100.0
name: detector1
sample_space_size: 100000
timestamp_distribution:
@ -14,9 +13,8 @@ detectors:
detector2:
allow_replacement: true
energy_distribution:
mean: 1000.0
std: 60.0
type: normal
type: constant
value: 200.0
name: detector2
sample_space_size: 100000
timestamp_distribution:
@ -26,9 +24,8 @@ detectors:
detector3:
allow_replacement: true
energy_distribution:
loc: 260.0
scale: 50.0
type: exponential
type: constant
value: 300.0
name: detector3
sample_space_size: 100000
timestamp_distribution:
@ -41,44 +38,44 @@ hardware_control:
port: 23
simulation:
energy_conversion:
B: 0.0
K: 1.0
B: 100.0
K: 2.0
event_generation_mode: random
num_events: 1
output_file: RC_1ev_D1100KUU_D2100KNN_D3100KEE
output_file: RC_1ev_D15KNE_D24KNU_D36KGN
output_format: all
packing_mode: combined
signal_type: 112
sync_pulse_signals:
pulse1:
detector1:
max: 10
max: 1
min: 1
detector2:
max: 10
max: 1
min: 1
detector3:
max: 10
max: 1
min: 1
pulse2:
detector1:
max: 10
max: 1
min: 1
detector2:
max: 10
max: 1
min: 1
detector3:
max: 10
max: 1
min: 1
pulse3:
detector1:
max: 10
max: 1
min: 1
detector2:
max: 10
max: 1
min: 1
detector3:
max: 10
max: 1
min: 1
pulse4:
detector1:

View File

@ -143,6 +143,7 @@ class MainConfigTab(ctk.CTkFrame):
ctk.CTkLabel(energy_conversion_frame, text="K:").pack(side="left", padx=10, pady=5)
self.energy_K_var = ctk.StringVar(value="1.0")
self.energy_K_var.trace_add('write', self._on_config_change)
energy_K_entry = ctk.CTkEntry(
energy_conversion_frame,
textvariable=self.energy_K_var,
@ -153,6 +154,7 @@ class MainConfigTab(ctk.CTkFrame):
ctk.CTkLabel(energy_conversion_frame, text="B:").pack(side="left", padx=10, pady=5)
self.energy_B_var = ctk.StringVar(value="0.0")
self.energy_B_var.trace_add('write', self._on_config_change)
energy_B_entry = ctk.CTkEntry(
energy_conversion_frame,
textvariable=self.energy_B_var,