I did some polishing and made it so one can truncate a whole folder instead of just one file. I'll leave it at that.
import clr
clr.AddReference('Metas.UncLib.Core')
clr.AddReference('Metas.UncLib.linProp')
clr.AddReference('Metas.Vna.Tools')
from System.IO import DirectoryInfo, Directory, Path, FileInfo, SearchOption
from Metas.Vna.Tools import Script
# ================= CONFIGURATION =================
input_folder = r"C:\path\to\input_folder" # folder containing .sdatb files
output_folder = r"C:\path\to\output_folder" # folder to save truncated files
min_freq_Hz = 1e9 # Min Frequency
max_freq_Hz = 3e9 # Max Frequency
# ================= INITIALIZATION =================
s = Script(RootPath)
di = DirectoryInfo(input_folder)
fis = di.GetFiles('*.sdatb', SearchOption.AllDirectories)
for fi in fis:
print("Processing:", fi.FullName)
# --- Load original dataset ---
d = s.LoadSParamData(fi.FullName)
# --- Determine frequency range indices ---
start_index = None
end_index = None
for i in range(d.NFreq):
f = d.Frequency[i]
if start_index is None and f >= min_freq_Hz:
start_index = i
if f <= max_freq_Hz:
end_index = i
if start_index is None or end_index is None or start_index > end_index:
print(" Skipped (no data in selected range)")
continue
print(" Truncating from %.3f GHz to %.3f GHz" %
(d.Frequency[start_index]/1e9, d.Frequency[end_index]/1e9))
# --- Clone dataset and overwrite truncated values ---
trunc = s.LoadSParamData(fi.FullName)
for i_new, i_orig in enumerate(range(start_index, end_index + 1)):
for r in range(d.NPorts):
for c in range(d.NPorts):
trunc[i_new, r, c] = d[i_orig, r, c]
# --- Truncate frequency vector ---
trunc.Frequency = d.Frequency[start_index:end_index + 1]
# --- Compute relative path for output ---
rel_path = fi.FullName[len(input_folder):].lstrip('\\')
output_path = Path.Combine(output_folder, rel_path)
output_dir = Path.GetDirectoryName(output_path)
if not Directory.Exists(output_dir):
Directory.CreateDirectory(output_dir)
# --- Save truncated dataset ---
output_file = Path.Combine(output_dir, Path.GetFileNameWithoutExtension(fi.Name) + '_trunc.sdatb')
s.SaveSParamData(output_file, trunc)
print(" Saved truncated file:", output_file)
print("Batch truncation completed for folder:", input_folder)