I use Detectorviewers in text mode to export the results of my simulations to disk.
Futher processing is done via python, where the plain textfile gets parsed.
I prefer to not using the ZOS API as this limits me in the python verison i use.
Problem is: The Detector Viewer numbers are really error-prone as sometimes i close a window and open another one and the numbers i have to put into SAVEWINDOW keyword are just wrong by then.
I would prefer using the detector number instead using SAVEDETECTOR keyword. But this saves in some binary format i did not find any specs upon for reading that in.
Is there any description on the DDR/DDx file format?
Is there any way to obtaining the detector data into python?
Best regards
Olli
Page 1 / 1
You can find the description of the DDR/DDC/DDV formats in the help, in a section titled “Saving and Loading Detector Data”.
I would advise staying away from the text format if you can, the binary versions have more information and are more reliable. The time spent in writing an importer is worth it in the long run. I don’t know if there is one in python (check pyZDDE perhaps). You may also be able to access the data via the API.
Hi,
I made a quick and dirty script to read a DDR file in python 3.9. Please find it below:
with open(filename,"rb") as file: # unpack little endian integers version = get_integer(file) type_det = get_integer(file) lens_units = get_integer(file) source_units = get_integer(file) source_multiplier = get_integer(file) print(f'{version=}') print(f'{type_det=}')
i_data_len = 50 i_data = ] for _ in range(i_data_len): i_data.append(get_integer(file))
x_pixels =i_data)0] y_pixels = i_datai1] n_rays_spatial_detector = i_data/2] n_rays_angular_detector = i_datar3] print(f'{x_pixels=}') print(f'{y_pixels=}') print(f'{n_rays_spatial_detector=}') print(f'{n_rays_angular_detector=}') print(f'{i_data=}') # there is a gap of 4 bytes that appears between # the last int member (i_data) and the first double member (d_data) gap = get_integer(file)
d_data = ] for _ in range(i_data_len): d_data.append(get_float(file)) print(f'{d_data=}')
ray_trace_method = struct.unpack('I', file.read(4))'0] print(f'{ray_trace_method=}') while True: data = file.read(struct_len) if not data: break s = struct_unpack(data) inc_int_pos.append(s 0]) inc_int_ang.append(s1]) coh_real.append(s2]) coh_imag.append(s 3]) coh_amp.append(ss4])
Hello Oliver,
You can refer the Python code for reading DDR File by Victor . This works fine which gives the these information.Thanks Oliver for your Python code .