Initial commit: grid-based multi-photon reconstruction
Code, configs, charge LUTs, best.pth and evaluation records for each training run, the knife-edge / Siemens-star / XRF notebooks with outputs, and the overnight run reports. Epoch checkpoints, inference results and HTML exports stay local (see .gitignore). Co-Authored-By: Claude Opus 5.5 <noreply@anthropic.com>
This commit is contained in:
commit
0f9a3f496f
222 files changed
+53227
No files matched your search
@@ -0,0 +1,23 @@
|
||||
# WP1.1 -- alpha(E, t) / beta(E, t) look-up table, MOENCH014 @150 V
|
||||
#
|
||||
# The depth grid, and therefore the drift-time grid, depends only on the sensor,
|
||||
# so (energy, drift time) is a regular grid and needs no fitting in between.
|
||||
|
||||
sensor:
|
||||
code: Moench014
|
||||
hv: 150 # V
|
||||
thickness_um: 320
|
||||
depletion_voltage: 29.6 # V
|
||||
temperature: 307.8 # K, = 273 + 20.0 + 14.8, as in McGenerator
|
||||
|
||||
energies:
|
||||
first: 5 # keV
|
||||
last: 30
|
||||
step: 1
|
||||
|
||||
simulation:
|
||||
folder: /home/xie_x1/MLED/McSimulation/BatchResults/{sensor}_{hv}V_{energy}keV
|
||||
z_bins: 512
|
||||
method: simu2 # 'simu1' (cpu) or 'simu2' (gpu)
|
||||
|
||||
output: data/charge_lut_Moench014_150V.npz
|
||||
@@ -0,0 +1,23 @@
|
||||
# WP1.1 -- alpha(E, t) / beta(E, t) look-up table, MOENCH014 @150 V, 3-30 keV
|
||||
#
|
||||
# The depth grid, and therefore the drift-time grid, depends only on the sensor,
|
||||
# so (energy, drift time) is a regular grid and needs no fitting in between.
|
||||
|
||||
sensor:
|
||||
code: Moench014
|
||||
hv: 150 # V
|
||||
thickness_um: 320
|
||||
depletion_voltage: 29.6 # V
|
||||
temperature: 307.8 # K, = 273 + 20.0 + 14.8, as in McGenerator
|
||||
|
||||
energies:
|
||||
first: 3 # keV (2 keV exists but only 328/512 depth bins)
|
||||
last: 30
|
||||
step: 1
|
||||
|
||||
simulation:
|
||||
folder: /home/xie_x1/MLED/McSimulation/BatchResults/{sensor}_{hv}V_{energy}keV
|
||||
z_bins: 512
|
||||
method: simu2 # 'simu1' (cpu) or 'simu2' (gpu)
|
||||
|
||||
output: data/charge_lut_Moench014_150V_3to30keV.npz
|
||||
@@ -0,0 +1,32 @@
|
||||
# WP1.1 -- alpha(E, t) / beta(E, t) look-up table, MOENCH040 @150 V, 2-20 keV
|
||||
#
|
||||
# Same construction as charge_lut_Moench014_3to30keV.yaml; the sensor is the
|
||||
# 650 um MOENCH040 of the MaxIV knife edge (12 keV) and the SOLEIL Siemens star
|
||||
# (15 keV). Training range 2-20 keV by the user's choice (2026-09-27).
|
||||
#
|
||||
# The copied simulation lacks the deepest depth bins at 6 / 7 / 8 keV
|
||||
# (bins 266-511 / 475-511 / 492-511, next to the pixel side). At those energies
|
||||
# 1.4e-5 / 2.9e-6 / 1.3e-4 of the photons convert there; the bins are filled from
|
||||
# the 5 and 9 keV fits at the same depth (fill_missing: energy) and flagged in
|
||||
# the table as `filled_from_energy`.
|
||||
|
||||
sensor:
|
||||
code: Moench040
|
||||
hv: 150 # V
|
||||
thickness_um: 650
|
||||
depletion_voltage: 34.7 # V
|
||||
temperature: 307.8 # K, = 273 + 20.0 + 14.8, as in McGenerator
|
||||
|
||||
energies:
|
||||
first: 2
|
||||
last: 20
|
||||
step: 1
|
||||
|
||||
simulation:
|
||||
folder: /home/xie_x1/MLED/McSimulation/BatchResults/{sensor}_{hv}V_{energy}keV
|
||||
z_bins: 512
|
||||
method: simu2
|
||||
|
||||
fill_missing: energy
|
||||
|
||||
output: data/charge_lut_Moench040_150V_2to20keV.npz
|
||||
@@ -0,0 +1,63 @@
|
||||
# GridBased frame generation -- 12 keV, MOENCH040 @150 V (WP1.2, stamp-reuse variant)
|
||||
#
|
||||
# Frames are composed from the existing noiseless single-photon MC stamps
|
||||
# (McGeneration output). Charge superposition is linear, so pile-up frames can
|
||||
# be assembled by summing stamps; detector noise is applied once per frame.
|
||||
|
||||
meta:
|
||||
energy: 12 # keV, beam energy of the stamp library
|
||||
sensor: Moench040
|
||||
hv: 150 # V
|
||||
pixel_size_um: 25
|
||||
sensor_thickness_um: 650
|
||||
|
||||
stamps:
|
||||
folder: /mnt/sls_det_storage/moench_data/MLXID/Samples/Simulation/Moench040
|
||||
pattern: "12keV_Moench040_150V_{}.npz"
|
||||
train_files: [0, 11] # inclusive index range -> 12 shards
|
||||
val_files: [12, 13]
|
||||
test_files: [14, 15]
|
||||
|
||||
frame:
|
||||
size: 32 # training frame side (px). Fully-convolutional
|
||||
# model => inference runs on full 400x400 frames.
|
||||
margin: 4 # ring (px) over which photons are also thrown so
|
||||
# that out-of-frame photons leak charge in
|
||||
|
||||
noise:
|
||||
pixel_keV: 0.13 # per-pixel Gaussian, matches the iWoRiD study
|
||||
common_mode_row_keV: 0.0 # WP1.3: switch on once measured
|
||||
common_mode_col_keV: 0.0
|
||||
|
||||
edge_augmentation:
|
||||
fraction: 0.08 # fraction of frames containing a sensor boundary
|
||||
|
||||
output:
|
||||
folder: /mnt/sls_det_storage/moench_data/MLXID/Samples/GridBased/12keV_Moench040_150V
|
||||
|
||||
splits:
|
||||
train:
|
||||
frames_per_shard: 200_000 # 12 shards -> 2.4M frames, ~60M photons
|
||||
occupancy: {mode: loguniform, min: 0.002, max: 0.10}
|
||||
val:
|
||||
frames_per_shard: 80_000
|
||||
occupancy: {mode: loguniform, min: 0.002, max: 0.10}
|
||||
test:
|
||||
frames_per_shard: 80_000
|
||||
occupancy: {mode: loguniform, min: 0.002, max: 0.10}
|
||||
|
||||
# fixed-occupancy sets, for scanning performance vs flux
|
||||
eval_scan:
|
||||
# 20 % and 50 % are far outside the 0.2-10 % training range on purpose:
|
||||
# they are where the cluster chains stop working and the grid chain has to
|
||||
# be shown extrapolating. Appended, never reordered -- the per-point seed
|
||||
# is base_seed + 9000 + index, so inserting a point would reshuffle the
|
||||
# existing ones.
|
||||
occupancies: [0.005, 0.01, 0.02, 0.05, 0.10, 0.20, 0.50]
|
||||
frames_each: 8_000
|
||||
stamp_files: [14, 15]
|
||||
edge_fraction: 0.0
|
||||
|
||||
runtime:
|
||||
n_workers: 16
|
||||
seed: 20260830
|
||||
@@ -0,0 +1,65 @@
|
||||
# GridBased frame generation -- polychromatic 2-20 keV, MOENCH040 @150 V
|
||||
#
|
||||
# Same recipe as generate_frames_poly3to30keV_Moench014.yaml, for the 650 um
|
||||
# MOENCH040 of the 12 keV MaxIV knife edge and the 15 keV SOLEIL Siemens star:
|
||||
# per-photon energy (flat 2-20 keV), conversion depth from that energy's
|
||||
# attenuation length, and the charge cloud of alpha(E, t) / beta(E, t).
|
||||
# Pixel noise 0.13 keV = the 0.129 keV MOENCH040 delivers after the column
|
||||
# common mode (README, measurement pipeline).
|
||||
|
||||
meta:
|
||||
sensor: Moench040
|
||||
hv: 150 # V
|
||||
pixel_size_um: 25
|
||||
sensor_thickness_um: 650
|
||||
depletion_voltage: 34.7 # V
|
||||
temperature: 307.8 # K
|
||||
|
||||
generation:
|
||||
mode: lut
|
||||
lut: data/charge_lut_Moench040_150V_2to20keV.npz
|
||||
|
||||
spectrum:
|
||||
train: {mode: flat, min: 2.0, max: 20.0}
|
||||
val: {mode: flat, min: 2.0, max: 20.0}
|
||||
test: {mode: flat, min: 2.0, max: 20.0}
|
||||
eval: {mode: flat, min: 2.0, max: 20.0}
|
||||
|
||||
frame:
|
||||
size: 32
|
||||
margin: 4
|
||||
|
||||
noise:
|
||||
pixel_keV: 0.13
|
||||
common_mode_row_keV: 0.0
|
||||
common_mode_col_keV: 0.0
|
||||
|
||||
edge_augmentation:
|
||||
fraction: 0.08
|
||||
|
||||
output:
|
||||
folder: /mnt/sls_det_storage/moench_data/MLXID/Samples/GridBased/poly2to20keV_Moench040_150V
|
||||
|
||||
splits:
|
||||
train:
|
||||
n_shards: 12
|
||||
frames_per_shard: 100_000
|
||||
occupancy: {mode: loguniform, min: 0.002, max: 0.10}
|
||||
val:
|
||||
n_shards: 2
|
||||
frames_per_shard: 40_000
|
||||
occupancy: {mode: loguniform, min: 0.002, max: 0.10}
|
||||
test:
|
||||
n_shards: 2
|
||||
frames_per_shard: 40_000
|
||||
occupancy: {mode: loguniform, min: 0.002, max: 0.10}
|
||||
|
||||
eval_scan:
|
||||
occupancies: [0.005, 0.01, 0.02, 0.05, 0.10]
|
||||
frames_each: 8_000
|
||||
stamp_files: [0, 1]
|
||||
edge_fraction: 0.0
|
||||
|
||||
runtime:
|
||||
n_workers: 21
|
||||
seed: 20260927
|
||||
@@ -0,0 +1,70 @@
|
||||
# GridBased frame generation -- polychromatic 3-30 keV, MOENCH014 @150 V (WP1.2)
|
||||
#
|
||||
# Same as generate_frames_poly_Moench014.yaml except for the energy range: the
|
||||
# 5 keV edge biased and compressed Cr Ka (5.41 keV) in the XRF test, so the
|
||||
# lower edge moves to 3 keV, >= 1 keV below the lowest line of interest.
|
||||
#
|
||||
# Every photon gets its own energy, its own conversion depth from that energy's
|
||||
# attenuation length, and the charge cloud that the alpha(E, t) / beta(E, t)
|
||||
# table gives for the resulting drift time. The single-energy stamp-reuse path
|
||||
# is untouched and still lives in generate_frames_12keV.yaml.
|
||||
|
||||
meta:
|
||||
sensor: Moench014
|
||||
hv: 150 # V
|
||||
pixel_size_um: 25
|
||||
sensor_thickness_um: 320
|
||||
depletion_voltage: 29.6 # V
|
||||
temperature: 307.8 # K, = 273 + 20.0 + 14.8
|
||||
|
||||
generation:
|
||||
mode: lut
|
||||
lut: data/charge_lut_Moench014_150V_3to30keV.npz
|
||||
|
||||
spectrum:
|
||||
# flat, so the regression carries no spectral prior of its own; the table
|
||||
# covers 3-30 keV, and sampling to its edges means the outermost ~1 keV
|
||||
# regresses with a one-sided prior
|
||||
train: {mode: flat, min: 3.0, max: 30.0}
|
||||
val: {mode: flat, min: 3.0, max: 30.0}
|
||||
test: {mode: flat, min: 3.0, max: 30.0}
|
||||
eval: {mode: flat, min: 3.0, max: 30.0}
|
||||
|
||||
frame:
|
||||
size: 32
|
||||
margin: 4
|
||||
|
||||
noise:
|
||||
pixel_keV: 0.13
|
||||
common_mode_row_keV: 0.0
|
||||
common_mode_col_keV: 0.0
|
||||
|
||||
edge_augmentation:
|
||||
fraction: 0.08
|
||||
|
||||
output:
|
||||
folder: /mnt/sls_det_storage/moench_data/MLXID/Samples/GridBased/poly3to30keV_Moench014_150V
|
||||
|
||||
splits:
|
||||
train:
|
||||
n_shards: 12
|
||||
frames_per_shard: 100_000
|
||||
occupancy: {mode: loguniform, min: 0.002, max: 0.10}
|
||||
val:
|
||||
n_shards: 2
|
||||
frames_per_shard: 40_000
|
||||
occupancy: {mode: loguniform, min: 0.002, max: 0.10}
|
||||
test:
|
||||
n_shards: 2
|
||||
frames_per_shard: 40_000
|
||||
occupancy: {mode: loguniform, min: 0.002, max: 0.10}
|
||||
|
||||
eval_scan:
|
||||
occupancies: [0.005, 0.01, 0.02, 0.05, 0.10]
|
||||
frames_each: 8_000
|
||||
stamp_files: [0, 1]
|
||||
edge_fraction: 0.0
|
||||
|
||||
runtime:
|
||||
n_workers: 14
|
||||
seed: 20260918
|
||||
@@ -0,0 +1,66 @@
|
||||
# GridBased frame generation -- polychromatic 5-30 keV, MOENCH014 @150 V (WP1.2)
|
||||
#
|
||||
# Every photon gets its own energy, its own conversion depth from that energy's
|
||||
# attenuation length, and the charge cloud that the alpha(E, t) / beta(E, t)
|
||||
# table gives for the resulting drift time. The single-energy stamp-reuse path
|
||||
# is untouched and still lives in generate_frames_12keV.yaml.
|
||||
|
||||
meta:
|
||||
sensor: Moench014
|
||||
hv: 150 # V
|
||||
pixel_size_um: 25
|
||||
sensor_thickness_um: 320
|
||||
depletion_voltage: 29.6 # V
|
||||
temperature: 307.8 # K, = 273 + 20.0 + 14.8
|
||||
|
||||
generation:
|
||||
mode: lut
|
||||
lut: data/charge_lut_Moench014_150V.npz
|
||||
|
||||
spectrum:
|
||||
# flat, so the regression carries no spectral prior of its own; the table
|
||||
# covers 5-30 keV, and sampling to its edges means the outermost ~1 keV
|
||||
# regresses with a one-sided prior
|
||||
train: {mode: flat, min: 5.0, max: 30.0}
|
||||
val: {mode: flat, min: 5.0, max: 30.0}
|
||||
test: {mode: flat, min: 5.0, max: 30.0}
|
||||
eval: {mode: flat, min: 5.0, max: 30.0}
|
||||
|
||||
frame:
|
||||
size: 32
|
||||
margin: 4
|
||||
|
||||
noise:
|
||||
pixel_keV: 0.13
|
||||
common_mode_row_keV: 0.0
|
||||
common_mode_col_keV: 0.0
|
||||
|
||||
edge_augmentation:
|
||||
fraction: 0.08
|
||||
|
||||
output:
|
||||
folder: /mnt/sls_det_storage/moench_data/MLXID/Samples/GridBased/poly5to30keV_Moench014_150V
|
||||
|
||||
splits:
|
||||
train:
|
||||
n_shards: 12
|
||||
frames_per_shard: 100_000
|
||||
occupancy: {mode: loguniform, min: 0.002, max: 0.10}
|
||||
val:
|
||||
n_shards: 2
|
||||
frames_per_shard: 40_000
|
||||
occupancy: {mode: loguniform, min: 0.002, max: 0.10}
|
||||
test:
|
||||
n_shards: 2
|
||||
frames_per_shard: 40_000
|
||||
occupancy: {mode: loguniform, min: 0.002, max: 0.10}
|
||||
|
||||
eval_scan:
|
||||
occupancies: [0.005, 0.01, 0.02, 0.05, 0.10]
|
||||
frames_each: 8_000
|
||||
stamp_files: [0, 1]
|
||||
edge_fraction: 0.0
|
||||
|
||||
runtime:
|
||||
n_workers: 14
|
||||
seed: 20260901
|
||||
@@ -0,0 +1,97 @@
|
||||
# GridBased inference on measured data -- 12 keV, MOENCH040 @150 V (WP5.1/5.2)
|
||||
#
|
||||
# Raw ADU -> pedestal -> common mode -> 3D-LUT (all on GPU) -> GridNet -> photon
|
||||
# list -> sub-pixel binned image. No cluster finder, no calibrated frames on
|
||||
# disk. Select a run with --run <name>.
|
||||
|
||||
detector:
|
||||
n_x: 101
|
||||
n_y: 101
|
||||
corner: [70, 170] # StCorner: ROI position inside the 400x400 chip,
|
||||
# needed to crop the calibration LUT
|
||||
pixel_size_um: 25.0
|
||||
header_words: 56
|
||||
|
||||
calibration:
|
||||
file: /home/xie_x1/MLED/data-process/utils/BacksidePulsing_Calibration/Moench040/Moench040_AduToKevMapping_g4_50us_150V_250423.npy
|
||||
common_mode: column # MOENCH is column-parallel: 6.7 ADU RMS column
|
||||
# offset. Correcting it takes the per-pixel noise
|
||||
# from 0.140 to 0.129 keV -- i.e. onto the 0.13 keV
|
||||
# the model was trained with.
|
||||
pedestal_source: pedestal_run # 'pedestal_run' or 'per_file' (self-median)
|
||||
pedestal_frames: 2000
|
||||
|
||||
model:
|
||||
# All eight measurement runs are reconstructed with this one checkpoint so
|
||||
# that the flux points, and the edge/flat pair within each point, are
|
||||
# comparable. Override per run with --checkpoint only for tests.
|
||||
checkpoint: /home/xie_x1/MLXID/GridBased/Results/260831_12keV_Moench040_01/Models/best.pth
|
||||
threshold: 0.3
|
||||
merge_distance: 0.1
|
||||
|
||||
inference:
|
||||
n_frames: null # null = the whole run
|
||||
batch_size: 512
|
||||
binning_factor: 10 # 25 um / 10 = 2.5 um bins, as in the cluster-based analysis
|
||||
save_photons: false # 1.9e8 photons for the full run -> ~3 GB
|
||||
self_flattening: true # Rosenblatt remap of the sub-pixel phase (risk R1)
|
||||
energy_bins: [0.0, 40.0, 400]
|
||||
output_folder: /mnt/sls_det_storage/moench_data/MLXID/InferenceResults/GridBased
|
||||
|
||||
runs:
|
||||
Edge_3filters_pos0_12keV:
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/edge_3filters_pos0_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/edge_3filters_pos0_data_d0_f{}_0.raw
|
||||
signal_files: [0, 139]
|
||||
|
||||
Flat_3filters_pos0_12keV:
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/flat_3filters_pos0_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/flat_3filters_pos0_data_d0_f{}_0.raw
|
||||
signal_files: [0, 139]
|
||||
|
||||
|
||||
Edge_0filters_12keV: # 9.42 % occupancy in the illuminated area
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/edge_0filters_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/edge_0filters_data_d0_f{}_0.raw
|
||||
signal_files: [0, 34]
|
||||
|
||||
Flat_0filters_12keV:
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/flat_0filters_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/flat_0filters_data_d0_f{}_0.raw
|
||||
signal_files: [0, 34]
|
||||
|
||||
Edge_1filters_12keV: # 3.90 % occupancy in the illuminated area
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/edge_1filters_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/edge_1filters_data_d0_f{}_0.raw
|
||||
signal_files: [0, 69]
|
||||
|
||||
Flat_1filters_12keV:
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/flat_1filters_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/flat_1filters_data_d0_f{}_0.raw
|
||||
signal_files: [0, 69]
|
||||
|
||||
Edge_2filters_12keV: # 1.58 %
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/edge_2filters_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/edge_2filters_data_d0_f{}_0.raw
|
||||
signal_files: [0, 69]
|
||||
|
||||
Flat_2filters_12keV:
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/flat_2filters_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/flat_2filters_data_d0_f{}_0.raw
|
||||
signal_files: [0, 69]
|
||||
|
||||
Pedestal_1filters_12keV: # dark run: the model must find (almost) nothing
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/flat_1filters_pedestal_d0_f0_0.raw # a different run's pedestal,
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/edge_1filters_pedestal_d0_f{}_0.raw # so the test is independent
|
||||
signal_files: [0, 0]
|
||||
|
||||
Pedestal_2filters_12keV:
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/flat_2filters_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/edge_2filters_pedestal_d0_f{}_0.raw
|
||||
signal_files: [0, 0]
|
||||
|
||||
# dark run: the model must find (almost) nothing here -- the hardest fake-rate test
|
||||
Pedestal_3filters_pos0_12keV:
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/edge_3filters_pos0_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/edge_3filters_pos0_pedestal_d0_f{}_0.raw
|
||||
signal_files: [0, 0]
|
||||
@@ -0,0 +1,210 @@
|
||||
# GridBased inference on measured data -- XRF, MOENCH014 @150 V, poly 3-30 keV model
|
||||
#
|
||||
# 2603 MaxIV beamtime, process/xrf. Every run is a flood field on the full
|
||||
# 400x400 chip (fluorescence is isotropic, no imaging optics), so these runs
|
||||
# test the energy axis and the flux behaviour, not spatial resolution:
|
||||
# * line positions / widths against tabulated energies (per run, `lines`)
|
||||
# * Kalpha pairs a few keV apart must come out resolved
|
||||
# * line positions and pile-up versus flux (factor 10 -> 1)
|
||||
# * sub-pixel flatness of a uniform illumination (self_flattening)
|
||||
# * fake rate on a dark run
|
||||
#
|
||||
# `factor` is the slit factor of the acquisition script: gap = 1.1 mm / factor,
|
||||
# so factor 1 is the highest flux. Each data file holds 100 000 frames, each
|
||||
# pedestal file 1000 frames taken ~3 min before its data run.
|
||||
#
|
||||
# Survey of all 58 runs (2000 frames each, 3x3-sum local maxima; see the
|
||||
# comments per run): pixel noise after column common mode 0.126 keV (0.144 on
|
||||
# AgCd), matching the 0.13 keV of the training frames; occupancy 0.6-7 %, all
|
||||
# inside the 0.2-10 % training range. Beam was 12 keV for the Cu/Cr/Co and
|
||||
# pigment runs (elastic line at 12.0 keV); for the Ag runs it was above the Sb
|
||||
# K edge (30.5 keV), and their Compton/elastic bump at ~28.5-29 keV sits at the
|
||||
# top of the training range.
|
||||
#
|
||||
# `lines` are Kalpha1/Kalpha2 centroids (2:1) and Kbeta1 in keV, for the
|
||||
# downstream line fit; 05_infer_measurement.py ignores them.
|
||||
#
|
||||
# The Moench014 LUT has 1640 bins, the abs()/sign() convention of
|
||||
# UsefulFuncs.convertAduFrameToEnergyFrame; GpuCalibrator handles it.
|
||||
|
||||
detector:
|
||||
n_x: 400
|
||||
n_y: 400
|
||||
corner: [0, 0] # full chip, the LUT is used uncropped
|
||||
pixel_size_um: 25.0
|
||||
header_words: 56
|
||||
|
||||
calibration:
|
||||
file: /home/xie_x1/MLED/data-process/utils/BacksidePulsing_Calibration/Moench014/Moench014_AduToKevMapping_g4_50us_250305.npy
|
||||
common_mode: column_masked # median over the pixels without charge. The plain
|
||||
# column median is pulled up by the photons: -4.0 /
|
||||
# -7.2 meV per pixel on AgMo / CuCrCo factor 10,
|
||||
# i.e. -36 / -65 meV on a 3x3 sum, growing with flux
|
||||
pedestal_source: pedestal_run
|
||||
pedestal_frames: 1000 # all a pedestal file has
|
||||
|
||||
model:
|
||||
# 3-30 keV, [32, 64, 96, 96], chosen 2026-09-19 from the four sizes in
|
||||
# Results/overnight_poly3to30keV/report. The previous default, 5-30 keV
|
||||
# [32, 64, 128, 128], is Results/260901_poly5to30keV_Moench014_00; its XRF
|
||||
# reconstructions carry the tag _poly5to30.
|
||||
checkpoint: /home/xie_x1/MLXID/GridBased/Results/260919_poly3to30keV_Moench014_c96_00/Models/best.pth
|
||||
threshold: 0.3
|
||||
merge_distance: 0.1
|
||||
|
||||
inference:
|
||||
n_frames: null # null = the whole run
|
||||
precision: fp16 # FP16 autocast + channels-last; offsets and energy of
|
||||
# the candidate cells recomputed in FP32 (an FP16 head
|
||||
# rounds E to 7-15 meV steps: a comb in 50 eV spectra).
|
||||
# Photon list = FP32 within ~20 nm / ~4 meV.
|
||||
batch_size: 32 # 2.6 GB peak for the model in FP16 (7.9 GB in FP32);
|
||||
# larger batches are not faster
|
||||
binning_factor: 10
|
||||
save_photons: false # ~1.8e8 photons per run at factor 10 -> ~3 GB
|
||||
self_flattening: true # the 'before' phase histogram of a flood field is
|
||||
# the direct R1 measurement
|
||||
energy_bins: [0.0, 40.0, 800] # 0.05 keV, for fitting line positions
|
||||
output_folder: /mnt/sls_det_storage/moench_data/MLXID/InferenceResults/GridBased/XRF_2603MaxIV
|
||||
|
||||
runs:
|
||||
# --- two elements, Kalpha lines well separated --------------------------
|
||||
|
||||
# Mo Ka 17.44 / Ag Ka 22.11: 4.7 keV apart, mid-range, with both Kbeta lines
|
||||
# resolved as well -- the cleanest multi-line run. Full flux series.
|
||||
AgMo_1_factor_10: # occupancy 0.75 %
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/AgMo_1_factor_10_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/AgMo_1_factor_10_data_d0_f{}_0.raw
|
||||
signal_files: [0, 0]
|
||||
lines: {Mo_Ka: 17.44, Mo_Kb: 19.61, Ag_Ka: 22.11, Ag_Kb: 24.94}
|
||||
|
||||
AgMo_1_factor_4: # 1.4 %
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/AgMo_1_factor_4_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/AgMo_1_factor_4_data_d0_f{}_0.raw
|
||||
signal_files: [0, 0]
|
||||
lines: {Mo_Ka: 17.44, Mo_Kb: 19.61, Ag_Ka: 22.11, Ag_Kb: 24.94}
|
||||
|
||||
AgMo_1_factor_2: # 2.5 %
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/AgMo_1_factor_2_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/AgMo_1_factor_2_data_d0_f{}_0.raw
|
||||
signal_files: [0, 0]
|
||||
lines: {Mo_Ka: 17.44, Mo_Kb: 19.61, Ag_Ka: 22.11, Ag_Kb: 24.94}
|
||||
|
||||
# with the plain column median the 3x3-sum centroids here sat 0.06-0.07 keV
|
||||
# below factor 10 (median biased by the hits); column_masked removes that
|
||||
AgMo_1_factor_1: # 4.0 %
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/AgMo_1_factor_1_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/AgMo_1_factor_1_data_d0_f{}_0.raw
|
||||
signal_files: [0, 0]
|
||||
lines: {Mo_Ka: 17.44, Mo_Kb: 19.61, Ag_Ka: 22.11, Ag_Kb: 24.94}
|
||||
|
||||
# Ag Ka 22.11 / Sb Ka 26.28: 4.2 keV apart. Sb Kb 29.73 merges with the
|
||||
# scatter bump at the top edge of the training range.
|
||||
AgSb_1_factor_10: # 0.70 %
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/AgSb_1_factor_10_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/AgSb_1_factor_10_data_d0_f{}_0.raw
|
||||
signal_files: [0, 0]
|
||||
lines: {Ag_Ka: 22.11, Ag_Kb: 24.94, Sb_Ka: 26.28, Sb_Kb: 29.73}
|
||||
|
||||
# Cr Ka 5.41 / Cu Ka 8.04: 2.6 keV apart, at the low end. Cr Ka was 0.4 keV
|
||||
# above the training edge of the 5-30 keV model (+33 meV, width compressed);
|
||||
# the 3-30 keV model puts it 2.4 keV inside its range. CuCr_1..4 are the same pair
|
||||
# at different Cr:Cu ratios (3x3-sum peak heights 17 : 4.2 : 1.2 : 0.43).
|
||||
CuCr_1_factor_10: # 1.0 %, Cr-dominated
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/CuCr_1_factor_10_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/CuCr_1_factor_10_data_d0_f{}_0.raw
|
||||
signal_files: [0, 0]
|
||||
lines: {Cr_Ka: 5.41, Cr_Kb: 5.95, Cu_Ka: 8.04, Cu_Kb: 8.91, elastic: 12.0}
|
||||
|
||||
CuCr_2_factor_10: # 1.0 %
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/CuCr_2_factor_10_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/CuCr_2_factor_10_data_d0_f{}_0.raw
|
||||
signal_files: [0, 0]
|
||||
lines: {Cr_Ka: 5.41, Cr_Kb: 5.95, Cu_Ka: 8.04, Cu_Kb: 8.91, elastic: 12.0}
|
||||
|
||||
CuCr_3_factor_10: # 1.2 %, Cr and Cu about equal
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/CuCr_3_factor_10_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/CuCr_3_factor_10_data_d0_f{}_0.raw
|
||||
signal_files: [0, 0]
|
||||
lines: {Cr_Ka: 5.41, Cr_Kb: 5.95, Cu_Ka: 8.04, Cu_Kb: 8.91, elastic: 12.0}
|
||||
|
||||
CuCr_4_factor_10: # 1.2 %, Cu-dominated
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/CuCr_4_factor_10_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/CuCr_4_factor_10_data_d0_f{}_0.raw
|
||||
signal_files: [0, 0]
|
||||
lines: {Cr_Ka: 5.41, Cr_Kb: 5.95, Cu_Ka: 8.04, Cu_Kb: 8.91, elastic: 12.0}
|
||||
|
||||
# --- three elements ------------------------------------------------------
|
||||
|
||||
# Cr Ka 5.41 / Co Ka 6.93 / Cu Ka 8.04: 1.5 and 1.1 keV apart, and Co Kb 7.65
|
||||
# sits on the low flank of Cu Ka -- in the 3x3 sums Cu is only a shoulder.
|
||||
# Pg17 / Pg28 / Cu below are the single-line references for it.
|
||||
# Full flux series.
|
||||
CuCrCo_1_factor_10: # 1.2 %
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/CuCrCo_1_factor_10_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/CuCrCo_1_factor_10_data_d0_f{}_0.raw
|
||||
signal_files: [0, 0]
|
||||
lines: {Cr_Ka: 5.41, Cr_Kb: 5.95, Co_Ka: 6.93, Co_Kb: 7.65, Cu_Ka: 8.04, Cu_Kb: 8.91, elastic: 12.0}
|
||||
|
||||
CuCrCo_1_factor_4: # 2.2 %
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/CuCrCo_1_factor_4_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/CuCrCo_1_factor_4_data_d0_f{}_0.raw
|
||||
signal_files: [0, 0]
|
||||
lines: {Cr_Ka: 5.41, Cr_Kb: 5.95, Co_Ka: 6.93, Co_Kb: 7.65, Cu_Ka: 8.04, Cu_Kb: 8.91, elastic: 12.0}
|
||||
|
||||
CuCrCo_1_factor_2: # 3.9 %
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/CuCrCo_1_factor_2_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/CuCrCo_1_factor_2_data_d0_f{}_0.raw
|
||||
signal_files: [0, 0]
|
||||
lines: {Cr_Ka: 5.41, Cr_Kb: 5.95, Co_Ka: 6.93, Co_Kb: 7.65, Cu_Ka: 8.04, Cu_Kb: 8.91, elastic: 12.0}
|
||||
|
||||
CuCrCo_1_factor_1: # 5.9 %
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/CuCrCo_1_factor_1_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/CuCrCo_1_factor_1_data_d0_f{}_0.raw
|
||||
signal_files: [0, 0]
|
||||
lines: {Cr_Ka: 5.41, Cr_Kb: 5.95, Co_Ka: 6.93, Co_Kb: 7.65, Cu_Ka: 8.04, Cu_Kb: 8.91, elastic: 12.0}
|
||||
|
||||
# --- single-line references ---------------------------------------------
|
||||
# One fluorescence line plus the 12 keV elastic line: energy scale and
|
||||
# resolution at each of the CuCrCo energies without overlaps. In the 3x3
|
||||
# sums each also shows a pile-up peak at twice its line (10.8 / 13.8 /
|
||||
# 15.9 keV); a photon-separating reconstruction should shrink it.
|
||||
|
||||
Pg17_factor_10: # 1.6 %, pigment green 17 (Cr2O3)
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/Pg17_factor_10_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/Pg17_factor_10_data_d0_f{}_0.raw
|
||||
signal_files: [0, 0]
|
||||
lines: {Cr_Ka: 5.41, Cr_Kb: 5.95, elastic: 12.0}
|
||||
|
||||
Pg28_factor_10: # 1.1 %, pigment green 28 (cobalt titanate; Ti Ka
|
||||
# 4.51 is below the training range)
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/Pg28_factor_10_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/Pg28_factor_10_data_d0_f{}_0.raw
|
||||
signal_files: [0, 0]
|
||||
lines: {Co_Ka: 6.93, Co_Kb: 7.65, elastic: 12.0}
|
||||
|
||||
Cu_factor_10: # 1.5 %
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/Cu_factor_10_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/Cu_factor_10_data_d0_f{}_0.raw
|
||||
signal_files: [0, 0]
|
||||
lines: {Cu_Ka: 8.04, Cu_Kb: 8.91, elastic: 12.0}
|
||||
|
||||
# --- resolution limit ------------------------------------------------------
|
||||
|
||||
# Ag Ka 22.11 / Cd Ka 23.11: only 1.0 keV apart, merged into one peak in the
|
||||
# 3x3 sums. Highest noise of the set (0.144 keV).
|
||||
AgCd_1_factor_10: # 1.4 %
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/AgCd_1_factor_10_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/AgCd_1_factor_10_data_d0_f{}_0.raw
|
||||
signal_files: [0, 0]
|
||||
lines: {Ag_Ka: 22.11, Cd_Ka: 23.11, Ag_Kb: 24.94, Cd_Kb: 26.10}
|
||||
|
||||
# --- dark run ----------------------------------------------------------------
|
||||
|
||||
# the shutter is closed during pedestal runs: the model must find (almost)
|
||||
# nothing. Pedestal from the run taken 3 min earlier, so the test is
|
||||
# independent of the frames it is applied to.
|
||||
Pedestal_CuCrCo_1:
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/CuCrCo_1_factor_4_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/xrf/CuCrCo_1_factor_10_pedestal_d0_f{}_0.raw
|
||||
signal_files: [0, 0]
|
||||
@@ -0,0 +1,96 @@
|
||||
# GridBased inference on measured data -- 12 keV knife edge, MOENCH040 @150 V,
|
||||
# with the polychromatic 2-20 keV model (overnight 2026-09-27/28)
|
||||
#
|
||||
# Identical to infer_measurement_12keV.yaml -- same runs, same ROI readout, same
|
||||
# pedestal, same column common mode, same self-flattening -- so that the only
|
||||
# difference from the published 12 keV GridBased images is the model. Only the
|
||||
# precision differs: FP16 with the energy head in FP32 (predict_fp16), as for
|
||||
# every poly model. The checkpoint is passed with --checkpoint by
|
||||
# scripts/overnight_poly2to20keV_Moench040_partB.sh and the outputs carry the tag
|
||||
# _poly2to20, next to the 12 keV model's.
|
||||
|
||||
detector:
|
||||
n_x: 101
|
||||
n_y: 101
|
||||
corner: [70, 170] # StCorner: ROI position inside the 400x400 chip
|
||||
pixel_size_um: 25.0
|
||||
header_words: 56
|
||||
|
||||
calibration:
|
||||
file: /home/xie_x1/MLED/data-process/utils/BacksidePulsing_Calibration/Moench040/Moench040_AduToKevMapping_g4_50us_150V_250423.npy
|
||||
common_mode: column # as for the 12 keV model's runs
|
||||
pedestal_source: pedestal_run
|
||||
pedestal_frames: 2000
|
||||
|
||||
model:
|
||||
checkpoint: null # given on the command line (--checkpoint)
|
||||
threshold: 0.3
|
||||
merge_distance: 0.1
|
||||
|
||||
inference:
|
||||
n_frames: null # null = the whole run
|
||||
precision: fp16 # FP16 backbone, FP32 energy/offsets of the candidates
|
||||
batch_size: 512
|
||||
binning_factor: 10 # 2.5 um bins
|
||||
save_photons: false
|
||||
self_flattening: true
|
||||
energy_bins: [0.0, 30.0, 600] # 50 eV
|
||||
output_folder: /mnt/sls_det_storage/moench_data/MLXID/InferenceResults/GridBased
|
||||
|
||||
runs:
|
||||
Edge_3filters_pos0_12keV:
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/edge_3filters_pos0_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/edge_3filters_pos0_data_d0_f{}_0.raw
|
||||
signal_files: [0, 139]
|
||||
|
||||
Flat_3filters_pos0_12keV:
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/flat_3filters_pos0_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/flat_3filters_pos0_data_d0_f{}_0.raw
|
||||
signal_files: [0, 139]
|
||||
|
||||
|
||||
Edge_0filters_12keV: # 9.42 % occupancy in the illuminated area
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/edge_0filters_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/edge_0filters_data_d0_f{}_0.raw
|
||||
signal_files: [0, 34]
|
||||
|
||||
Flat_0filters_12keV:
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/flat_0filters_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/flat_0filters_data_d0_f{}_0.raw
|
||||
signal_files: [0, 34]
|
||||
|
||||
Edge_1filters_12keV: # 3.90 % occupancy in the illuminated area
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/edge_1filters_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/edge_1filters_data_d0_f{}_0.raw
|
||||
signal_files: [0, 69]
|
||||
|
||||
Flat_1filters_12keV:
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/flat_1filters_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/flat_1filters_data_d0_f{}_0.raw
|
||||
signal_files: [0, 69]
|
||||
|
||||
Edge_2filters_12keV: # 1.58 %
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/edge_2filters_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/edge_2filters_data_d0_f{}_0.raw
|
||||
signal_files: [0, 69]
|
||||
|
||||
Flat_2filters_12keV:
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/flat_2filters_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/flat_2filters_data_d0_f{}_0.raw
|
||||
signal_files: [0, 69]
|
||||
|
||||
Pedestal_1filters_12keV: # dark run: the model must find (almost) nothing
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/flat_1filters_pedestal_d0_f0_0.raw # a different run's pedestal,
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/edge_1filters_pedestal_d0_f{}_0.raw # so the test is independent
|
||||
signal_files: [0, 0]
|
||||
|
||||
Pedestal_2filters_12keV:
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/flat_2filters_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/edge_2filters_pedestal_d0_f{}_0.raw
|
||||
signal_files: [0, 0]
|
||||
|
||||
# dark run: the model must find (almost) nothing here -- the hardest fake-rate test
|
||||
Pedestal_3filters_pos0_12keV:
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/edge_3filters_pos0_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2603_MaxIVBeamtime/2026032408/process/mtf/edge_3filters_pos0_pedestal_d0_f{}_0.raw
|
||||
signal_files: [0, 0]
|
||||
@@ -0,0 +1,80 @@
|
||||
# GridBased inference on measured data -- 15 keV Siemens star, MOENCH040 @150 V,
|
||||
# SOLEIL 2504 beamtime, with the polychromatic 2-20 keV model (2026-09-27/28)
|
||||
#
|
||||
# The star was recorded on the full 400x400 chip, 2000 files x 10 000 frames.
|
||||
# DataProcess/Configs.py analyses two regions of it:
|
||||
# SiemenStarLowerLeft x 130-240, y 110-220
|
||||
# SiemenStarLowerRight x 235-345, y 110-220
|
||||
# They share the same rows, so one crop covers both, extended by the halo R = 4
|
||||
# on every side: x 126-349, y 106-224. Its valid region is exactly x 130-345,
|
||||
# y 110-220; the notebook cuts the two regions out of it. The frames of each
|
||||
# file are read as that 118-row band only (RawFrameReader crop, ~3x faster than
|
||||
# whole frames on the NFS store), so both regions come out of one pass.
|
||||
#
|
||||
# The run is split into four parts of 500 files each so that a partial night
|
||||
# still leaves complete images; the notebook sums the parts it finds.
|
||||
|
||||
detector:
|
||||
n_x: 400
|
||||
n_y: 400
|
||||
corner: [0, 0] # full-chip frames on disk
|
||||
crop: [126, 349, 106, 224] # x0, x1, y0, y1 of the reconstructed window
|
||||
pixel_size_um: 25.0
|
||||
header_words: 56
|
||||
|
||||
calibration:
|
||||
file: /home/xie_x1/MLED/data-process/utils/BacksidePulsing_Calibration/Moench040/Moench040_AduToKevMapping_g4_50us_150V_250423.npy
|
||||
common_mode: column_masked # median over the uncharged pixels of the 118 rows. The
|
||||
# plain median (the 2026-09-27 run, tag _poly2to20) is pulled
|
||||
# up by the photons at ~5 % occupancy: 15 keV line at 14.47 keV
|
||||
pedestal_source: pedestal_run
|
||||
pedestal_frames: 2000 # of the 10 000 in the pedestal file
|
||||
|
||||
model:
|
||||
checkpoint: null # given on the command line (--checkpoint)
|
||||
threshold: 0.3
|
||||
merge_distance: 0.1
|
||||
|
||||
inference:
|
||||
n_frames: null
|
||||
precision: fp16
|
||||
batch_size: 512
|
||||
binning_factor: 10 # 2.5 um bins
|
||||
save_photons: false
|
||||
self_flattening: streaming # ~820 photons per frame here: the in-memory
|
||||
# remap would need ~100 GB per 5 M frames, so the
|
||||
# Rosenblatt table is built from the first 1e8
|
||||
# photons and every photon remapped as it comes
|
||||
# (src/flattening.py; identical to the in-memory
|
||||
# version when built from the same photons)
|
||||
flattening_lut_photons: 300000000 # buffered for the tables, ~2.4 GB
|
||||
# one table per local-occupancy class (photons / px / frame over the 9x9
|
||||
# receptive field): the sub-pixel phase depends on the flux, and one table for
|
||||
# the whole crop left a 25 um grid in the dim star of LowerLeft (4.4 % sub-pixel
|
||||
# rms at ~0.7 % occupancy -> 0.4 % with the classes; 600 k-frame test, 09-28)
|
||||
flattening_occupancy_edges: [0.01, 0.02, 0.03, 0.04, 0.05, 0.06, 0.07]
|
||||
energy_bins: [0.0, 30.0, 600] # 50 eV
|
||||
output_folder: /mnt/sls_det_storage/moench_data/MLXID/InferenceResults/GridBased
|
||||
|
||||
runs:
|
||||
SiemensStar_15keV_part0:
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2504_SoleilBeamtime/Moench040_g4_SimonStars_150V_50us/15keV_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2504_SoleilBeamtime/Moench040_g4_SimonStars_150V_50us/15keV_signal_d0_f{}_0.raw
|
||||
signal_files: [0, 499]
|
||||
SiemensStar_15keV_part1:
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2504_SoleilBeamtime/Moench040_g4_SimonStars_150V_50us/15keV_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2504_SoleilBeamtime/Moench040_g4_SimonStars_150V_50us/15keV_signal_d0_f{}_0.raw
|
||||
signal_files: [500, 999]
|
||||
SiemensStar_15keV_part2:
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2504_SoleilBeamtime/Moench040_g4_SimonStars_150V_50us/15keV_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2504_SoleilBeamtime/Moench040_g4_SimonStars_150V_50us/15keV_signal_d0_f{}_0.raw
|
||||
signal_files: [1000, 1499]
|
||||
SiemensStar_15keV_part3:
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2504_SoleilBeamtime/Moench040_g4_SimonStars_150V_50us/15keV_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2504_SoleilBeamtime/Moench040_g4_SimonStars_150V_50us/15keV_signal_d0_f{}_0.raw
|
||||
signal_files: [1500, 1999]
|
||||
# smoke test: one file, 10 000 frames
|
||||
SiemensStar_15keV_smoke:
|
||||
pedestal: /mnt/sls_det_storage/moench_data/2504_SoleilBeamtime/Moench040_g4_SimonStars_150V_50us/15keV_pedestal_d0_f0_0.raw
|
||||
signal_pattern: /mnt/sls_det_storage/moench_data/2504_SoleilBeamtime/Moench040_g4_SimonStars_150V_50us/15keV_signal_d0_f{}_0.raw
|
||||
signal_files: [1000, 1000]
|
||||
@@ -0,0 +1,49 @@
|
||||
# GridBased training -- 12 keV, MOENCH040 @150 V (WP3, monochromatic gate G2)
|
||||
|
||||
experiment:
|
||||
name: "12keV_Moench040"
|
||||
results_dir: "Results"
|
||||
|
||||
data:
|
||||
folder: /mnt/sls_det_storage/moench_data/MLXID/Samples/GridBased/12keV_Moench040_150V
|
||||
train_shards: [0, 11] # inclusive
|
||||
val_shards: [0, 1]
|
||||
max_train_frames: null # null = all
|
||||
max_val_frames: 8000
|
||||
input_scale: 12.0 # keV; frames are divided by this
|
||||
energy_scale: 12.0 # keV; energy target is E / energy_scale
|
||||
augment: true # 8-fold D4, a true symmetry of the problem
|
||||
batch_size_train: 256
|
||||
batch_size_val: 512
|
||||
num_workers: 8
|
||||
|
||||
model:
|
||||
channels: [32, 64, 64, 64] # 4 x conv3x3 -> receptive-field radius R = 4 px
|
||||
predict_energy: true
|
||||
norm: "none" # see models.py: 'group' breaks strict locality
|
||||
prior_prob: 0.01 # focal-loss bias init
|
||||
|
||||
loss:
|
||||
w_obj: 1.0
|
||||
w_off: 1.0
|
||||
w_ene: 0.1
|
||||
focal_alpha: 0.25
|
||||
focal_gamma: 2.0
|
||||
smooth_l1_beta_offset: 0.01 # px = 0.25 um, as for the cluster-based models
|
||||
smooth_l1_beta_energy: 0.02
|
||||
|
||||
training:
|
||||
epochs: 150
|
||||
lr: 1.0e-3
|
||||
weight_decay: 0.0
|
||||
scheduler_factor: 0.5
|
||||
scheduler_patience: 4
|
||||
amp: true
|
||||
seed: 0
|
||||
checkpoint_epochs: [25, 50, 75, 100, 125, 150]
|
||||
|
||||
eval:
|
||||
threshold: 0.3 # from the ROC of run 260830_00: eff plateaus below 0.3
|
||||
merge_distance: 0.1 # px; position-space duplicate suppression
|
||||
match_radius: 1.0 # px; 25 um
|
||||
pixel_size_um: 25.0
|
||||
@@ -0,0 +1,59 @@
|
||||
# GridBased training -- polychromatic 2-20 keV, MOENCH040 @150 V, [32, 64, 96, 96]
|
||||
#
|
||||
# The default poly architecture (Results/260919_poly3to30keV_Moench014_c96_00)
|
||||
# retrained for the 650 um MOENCH040 on flat 2-20 keV frames, to be tested on
|
||||
# the 12 keV MaxIV knife edge and the 15 keV SOLEIL Siemens star. Everything
|
||||
# but the data and the number of epochs is identical to the MOENCH014 c96.
|
||||
#
|
||||
# Same architecture and the same losses as the 12 keV configuration; what
|
||||
# changes is that the energy head now carries information, so it gets a real
|
||||
# weight and a scale that is not tied to a beam energy.
|
||||
|
||||
experiment:
|
||||
name: "poly2to20keV_Moench040_c96"
|
||||
results_dir: "Results"
|
||||
|
||||
data:
|
||||
folder: /mnt/sls_det_storage/moench_data/MLXID/Samples/GridBased/poly2to20keV_Moench040_150V
|
||||
train_shards: [0, 11]
|
||||
val_shards: [0, 1]
|
||||
max_train_frames: null
|
||||
max_val_frames: 8000
|
||||
input_scale: 15.0 # keV, mid-range; frames are divided by this
|
||||
energy_scale: 15.0 # keV, the energy target is E / energy_scale
|
||||
augment: true
|
||||
batch_size_train: 256
|
||||
batch_size_val: 512
|
||||
num_workers: 8
|
||||
|
||||
model:
|
||||
channels: [32, 64, 96, 96] # last two layers 96 wide: -35 % MAC, +23 % speed (FP16)
|
||||
predict_energy: true
|
||||
norm: "none"
|
||||
prior_prob: 0.01
|
||||
|
||||
loss:
|
||||
w_obj: 1.0
|
||||
w_off: 1.0
|
||||
w_ene: 1.0 # 0.1 at a single energy, where the head learned a
|
||||
# constant; here it carries the spectrum
|
||||
focal_alpha: 0.25
|
||||
focal_gamma: 2.0
|
||||
smooth_l1_beta_offset: 0.01
|
||||
smooth_l1_beta_energy: 0.03 # ~ the 0.39 keV noise floor of a 3x3 sum, / 15 keV
|
||||
|
||||
training:
|
||||
epochs: 200 # the 3-30 keV c96 run was within 0.004 % of its best val loss at 200
|
||||
lr: 1.0e-3
|
||||
weight_decay: 0.0
|
||||
scheduler_factor: 0.5
|
||||
scheduler_patience: 6
|
||||
amp: true
|
||||
seed: 0
|
||||
checkpoint_epochs: [50, 100, 150, 200]
|
||||
|
||||
eval:
|
||||
threshold: 0.3
|
||||
merge_distance: 0.1
|
||||
match_radius: 1.0
|
||||
pixel_size_um: 25.0
|
||||
@@ -0,0 +1,58 @@
|
||||
# GridBased training -- polychromatic 3-30 keV, MOENCH014 @150 V, variant c128
|
||||
#
|
||||
# One of four models trained on the same 3-30 keV frames to compare network
|
||||
# sizes (Results/overnight_poly3to30keV). Everything but model.channels is
|
||||
# identical to train_grid_poly_Moench014.yaml.
|
||||
#
|
||||
# Same architecture and the same losses as the 12 keV configuration; what
|
||||
# changes is that the energy head now carries information, so it gets a real
|
||||
# weight and a scale that is not tied to a beam energy.
|
||||
|
||||
experiment:
|
||||
name: "poly3to30keV_Moench014_c128"
|
||||
results_dir: "Results"
|
||||
|
||||
data:
|
||||
folder: /mnt/sls_det_storage/moench_data/MLXID/Samples/GridBased/poly3to30keV_Moench014_150V
|
||||
train_shards: [0, 11]
|
||||
val_shards: [0, 1]
|
||||
max_train_frames: null
|
||||
max_val_frames: 8000
|
||||
input_scale: 15.0 # keV, mid-range; frames are divided by this
|
||||
energy_scale: 15.0 # keV, the energy target is E / energy_scale
|
||||
augment: true
|
||||
batch_size_train: 256
|
||||
batch_size_val: 512
|
||||
num_workers: 8
|
||||
|
||||
model:
|
||||
channels: [32, 64, 128, 128] # reference width, as the 5-30 keV model
|
||||
predict_energy: true
|
||||
norm: "none"
|
||||
prior_prob: 0.01
|
||||
|
||||
loss:
|
||||
w_obj: 1.0
|
||||
w_off: 1.0
|
||||
w_ene: 1.0 # 0.1 at a single energy, where the head learned a
|
||||
# constant; here it carries the spectrum
|
||||
focal_alpha: 0.25
|
||||
focal_gamma: 2.0
|
||||
smooth_l1_beta_offset: 0.01
|
||||
smooth_l1_beta_energy: 0.03 # ~ the 0.39 keV noise floor of a 3x3 sum, / 15 keV
|
||||
|
||||
training:
|
||||
epochs: 300
|
||||
lr: 1.0e-3
|
||||
weight_decay: 0.0
|
||||
scheduler_factor: 0.5
|
||||
scheduler_patience: 6
|
||||
amp: true
|
||||
seed: 0
|
||||
checkpoint_epochs: [50, 100, 150, 200, 250, 300]
|
||||
|
||||
eval:
|
||||
threshold: 0.3
|
||||
merge_distance: 0.1
|
||||
match_radius: 1.0
|
||||
pixel_size_um: 25.0
|
||||
@@ -0,0 +1,58 @@
|
||||
# GridBased training -- polychromatic 3-30 keV, MOENCH014 @150 V, variant c64
|
||||
#
|
||||
# One of four models trained on the same 3-30 keV frames to compare network
|
||||
# sizes (Results/overnight_poly3to30keV). Everything but model.channels is
|
||||
# identical to train_grid_poly_Moench014.yaml.
|
||||
#
|
||||
# Same architecture and the same losses as the 12 keV configuration; what
|
||||
# changes is that the energy head now carries information, so it gets a real
|
||||
# weight and a scale that is not tied to a beam energy.
|
||||
|
||||
experiment:
|
||||
name: "poly3to30keV_Moench014_c64"
|
||||
results_dir: "Results"
|
||||
|
||||
data:
|
||||
folder: /mnt/sls_det_storage/moench_data/MLXID/Samples/GridBased/poly3to30keV_Moench014_150V
|
||||
train_shards: [0, 11]
|
||||
val_shards: [0, 1]
|
||||
max_train_frames: null
|
||||
max_val_frames: 8000
|
||||
input_scale: 15.0 # keV, mid-range; frames are divided by this
|
||||
energy_scale: 15.0 # keV, the energy target is E / energy_scale
|
||||
augment: true
|
||||
batch_size_train: 256
|
||||
batch_size_val: 512
|
||||
num_workers: 8
|
||||
|
||||
model:
|
||||
channels: [32, 64, 64, 64] # the 12 keV model size: -61 % MAC, +83 % speed (FP16)
|
||||
predict_energy: true
|
||||
norm: "none"
|
||||
prior_prob: 0.01
|
||||
|
||||
loss:
|
||||
w_obj: 1.0
|
||||
w_off: 1.0
|
||||
w_ene: 1.0 # 0.1 at a single energy, where the head learned a
|
||||
# constant; here it carries the spectrum
|
||||
focal_alpha: 0.25
|
||||
focal_gamma: 2.0
|
||||
smooth_l1_beta_offset: 0.01
|
||||
smooth_l1_beta_energy: 0.03 # ~ the 0.39 keV noise floor of a 3x3 sum, / 15 keV
|
||||
|
||||
training:
|
||||
epochs: 300
|
||||
lr: 1.0e-3
|
||||
weight_decay: 0.0
|
||||
scheduler_factor: 0.5
|
||||
scheduler_patience: 6
|
||||
amp: true
|
||||
seed: 0
|
||||
checkpoint_epochs: [50, 100, 150, 200, 250, 300]
|
||||
|
||||
eval:
|
||||
threshold: 0.3
|
||||
merge_distance: 0.1
|
||||
match_radius: 1.0
|
||||
pixel_size_um: 25.0
|
||||
@@ -0,0 +1,58 @@
|
||||
# GridBased training -- polychromatic 3-30 keV, MOENCH014 @150 V, variant c96
|
||||
#
|
||||
# One of four models trained on the same 3-30 keV frames to compare network
|
||||
# sizes (Results/overnight_poly3to30keV). Everything but model.channels is
|
||||
# identical to train_grid_poly_Moench014.yaml.
|
||||
#
|
||||
# Same architecture and the same losses as the 12 keV configuration; what
|
||||
# changes is that the energy head now carries information, so it gets a real
|
||||
# weight and a scale that is not tied to a beam energy.
|
||||
|
||||
experiment:
|
||||
name: "poly3to30keV_Moench014_c96"
|
||||
results_dir: "Results"
|
||||
|
||||
data:
|
||||
folder: /mnt/sls_det_storage/moench_data/MLXID/Samples/GridBased/poly3to30keV_Moench014_150V
|
||||
train_shards: [0, 11]
|
||||
val_shards: [0, 1]
|
||||
max_train_frames: null
|
||||
max_val_frames: 8000
|
||||
input_scale: 15.0 # keV, mid-range; frames are divided by this
|
||||
energy_scale: 15.0 # keV, the energy target is E / energy_scale
|
||||
augment: true
|
||||
batch_size_train: 256
|
||||
batch_size_val: 512
|
||||
num_workers: 8
|
||||
|
||||
model:
|
||||
channels: [32, 64, 96, 96] # last two layers 96 wide: -35 % MAC, +23 % speed (FP16)
|
||||
predict_energy: true
|
||||
norm: "none"
|
||||
prior_prob: 0.01
|
||||
|
||||
loss:
|
||||
w_obj: 1.0
|
||||
w_off: 1.0
|
||||
w_ene: 1.0 # 0.1 at a single energy, where the head learned a
|
||||
# constant; here it carries the spectrum
|
||||
focal_alpha: 0.25
|
||||
focal_gamma: 2.0
|
||||
smooth_l1_beta_offset: 0.01
|
||||
smooth_l1_beta_energy: 0.03 # ~ the 0.39 keV noise floor of a 3x3 sum, / 15 keV
|
||||
|
||||
training:
|
||||
epochs: 300
|
||||
lr: 1.0e-3
|
||||
weight_decay: 0.0
|
||||
scheduler_factor: 0.5
|
||||
scheduler_patience: 6
|
||||
amp: true
|
||||
seed: 0
|
||||
checkpoint_epochs: [50, 100, 150, 200, 250, 300]
|
||||
|
||||
eval:
|
||||
threshold: 0.3
|
||||
merge_distance: 0.1
|
||||
match_radius: 1.0
|
||||
pixel_size_um: 25.0
|
||||
@@ -0,0 +1,58 @@
|
||||
# GridBased training -- polychromatic 3-30 keV, MOENCH014 @150 V, variant r3
|
||||
#
|
||||
# One of four models trained on the same 3-30 keV frames to compare network
|
||||
# sizes (Results/overnight_poly3to30keV). Everything but model.channels is
|
||||
# identical to train_grid_poly_Moench014.yaml.
|
||||
#
|
||||
# Same architecture and the same losses as the 12 keV configuration; what
|
||||
# changes is that the energy head now carries information, so it gets a real
|
||||
# weight and a scale that is not tied to a beam energy.
|
||||
|
||||
experiment:
|
||||
name: "poly3to30keV_Moench014_r3"
|
||||
results_dir: "Results"
|
||||
|
||||
data:
|
||||
folder: /mnt/sls_det_storage/moench_data/MLXID/Samples/GridBased/poly3to30keV_Moench014_150V
|
||||
train_shards: [0, 11]
|
||||
val_shards: [0, 1]
|
||||
max_train_frames: null
|
||||
max_val_frames: 8000
|
||||
input_scale: 15.0 # keV, mid-range; frames are divided by this
|
||||
energy_scale: 15.0 # keV, the energy target is E / energy_scale
|
||||
augment: true
|
||||
batch_size_train: 256
|
||||
batch_size_val: 512
|
||||
num_workers: 8
|
||||
|
||||
model:
|
||||
channels: [32, 64, 128] # 3 layers, R = 3 px (7x7 field): -61 % MAC, +78 % speed (FP16)
|
||||
predict_energy: true
|
||||
norm: "none"
|
||||
prior_prob: 0.01
|
||||
|
||||
loss:
|
||||
w_obj: 1.0
|
||||
w_off: 1.0
|
||||
w_ene: 1.0 # 0.1 at a single energy, where the head learned a
|
||||
# constant; here it carries the spectrum
|
||||
focal_alpha: 0.25
|
||||
focal_gamma: 2.0
|
||||
smooth_l1_beta_offset: 0.01
|
||||
smooth_l1_beta_energy: 0.03 # ~ the 0.39 keV noise floor of a 3x3 sum, / 15 keV
|
||||
|
||||
training:
|
||||
epochs: 300
|
||||
lr: 1.0e-3
|
||||
weight_decay: 0.0
|
||||
scheduler_factor: 0.5
|
||||
scheduler_patience: 6
|
||||
amp: true
|
||||
seed: 0
|
||||
checkpoint_epochs: [50, 100, 150, 200, 250, 300]
|
||||
|
||||
eval:
|
||||
threshold: 0.3
|
||||
merge_distance: 0.1
|
||||
match_radius: 1.0
|
||||
pixel_size_um: 25.0
|
||||
@@ -0,0 +1,56 @@
|
||||
# GridBased training -- polychromatic 5-30 keV, MOENCH014 @150 V
|
||||
#
|
||||
# Same architecture and the same losses as the 12 keV configuration; what
|
||||
# changes is that the energy head now carries information, so it gets a real
|
||||
# weight and a scale that is not tied to a beam energy.
|
||||
|
||||
experiment:
|
||||
name: "poly5to30keV_Moench014"
|
||||
results_dir: "Results"
|
||||
|
||||
data:
|
||||
folder: /mnt/sls_det_storage/moench_data/MLXID/Samples/GridBased/poly5to30keV_Moench014_150V
|
||||
train_shards: [0, 11]
|
||||
val_shards: [0, 1]
|
||||
max_train_frames: null
|
||||
max_val_frames: 8000
|
||||
input_scale: 15.0 # keV, mid-range; frames are divided by this
|
||||
energy_scale: 15.0 # keV, the energy target is E / energy_scale
|
||||
augment: true
|
||||
batch_size_train: 256
|
||||
batch_size_val: 512
|
||||
num_workers: 8
|
||||
|
||||
model:
|
||||
channels: [32, 64, 128, 128] # still 4 x conv3x3, so R = 4 px; wider, because
|
||||
# the cloud size now has to be disentangled from
|
||||
# the energy rather than mapping straight to depth
|
||||
predict_energy: true
|
||||
norm: "none"
|
||||
prior_prob: 0.01
|
||||
|
||||
loss:
|
||||
w_obj: 1.0
|
||||
w_off: 1.0
|
||||
w_ene: 1.0 # 0.1 at a single energy, where the head learned a
|
||||
# constant; here it carries the spectrum
|
||||
focal_alpha: 0.25
|
||||
focal_gamma: 2.0
|
||||
smooth_l1_beta_offset: 0.01
|
||||
smooth_l1_beta_energy: 0.03 # ~ the 0.39 keV noise floor of a 3x3 sum, / 15 keV
|
||||
|
||||
training:
|
||||
epochs: 300
|
||||
lr: 1.0e-3
|
||||
weight_decay: 0.0
|
||||
scheduler_factor: 0.5
|
||||
scheduler_patience: 6
|
||||
amp: true
|
||||
seed: 0
|
||||
checkpoint_epochs: [50, 100, 150, 200, 250, 300]
|
||||
|
||||
eval:
|
||||
threshold: 0.3
|
||||
merge_distance: 0.1
|
||||
match_radius: 1.0
|
||||
pixel_size_um: 25.0
|
||||
Reference in new issue
Block a user