Skip to content

Commit ccb16ec

Browse files
committed
TESTS: added tester for 2ide ptycho data. It only checks the initial loading.
1 parent aa652e1 commit ccb16ec

File tree

2 files changed

+219
-2
lines changed

2 files changed

+219
-2
lines changed

src/pyxalign/io/loaders/lamni/api.py

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,7 @@
11
from typing import Optional, Union
22

33
from pyxalign.io.loaders.base import StandardData
4-
# from pyxalign.io.loaders.lamni.base_loader import BaseLoader
5-
BaseLoader=1
4+
from pyxalign.io.loaders.lamni.base_loader import BaseLoader
65
from pyxalign.io.loaders.lamni.options import LamniLoadOptions
76
from pyxalign.io.loaders.lamni.utils import load_experiment
87

tests/full_tests/xrf_ptycho_1.py

Lines changed: 218 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,218 @@
1+
# this file currently only tests the pear v3 loader
2+
import os
3+
import argparse
4+
import multiprocessing as mp
5+
import cupy as cp
6+
7+
import matplotlib.pyplot as plt
8+
import pyxalign
9+
from pyxalign import options as opts
10+
from pyxalign.api import enums
11+
from pyxalign.api.types import r_type
12+
from pyxalign.io.load import load_task
13+
from pyxalign.io.loaders.enums import LoaderType
14+
from pyxalign import gpu_utils
15+
from pyxalign.io.loaders.lamni.options import BaseLoadOptions, Beamline2IDELoadOptions
16+
from pyxalign.test_utils_2 import CITestArgumentParser, CITestHelper
17+
from pyxalign.api.options_utils import set_all_device_options
18+
import pyxalign.io.loaders
19+
from pyxalign.io.loaders.utils import convert_projection_dict_to_array
20+
21+
22+
def run_full_test_xrf_ptycho_1(
23+
update_tester_results: bool = False,
24+
save_temp_files: bool = False,
25+
test_start_point: enums.TestStartPoints = enums.TestStartPoints.BEGINNING,
26+
):
27+
28+
# Setup the test
29+
ci_options = opts.CITestOptions(
30+
test_data_name=os.path.join("2ide", "2025-1_Lamni-6"),
31+
update_tester_results=update_tester_results,
32+
proj_idx=list(range(0, 750, 150)),
33+
save_temp_files=save_temp_files,
34+
)
35+
ci_test_helper = CITestHelper(options=ci_options)
36+
# define a downscaling value for when volumes are saved to prevent
37+
# saving files large files
38+
# define a downscaling value for when volumes are saved to prevent
39+
# saving files large files
40+
s = 16
41+
42+
# Setup default gpu options
43+
n_gpus = cp.cuda.runtime.getDeviceCount()
44+
gpu_list = list(range(0, n_gpus))
45+
single_gpu_device_options = opts.DeviceOptions()
46+
multi_gpu_device_options = opts.DeviceOptions(
47+
gpu=opts.GPUOptions(
48+
n_gpus=n_gpus,
49+
gpu_indices=gpu_list,
50+
chunk_length=20,
51+
)
52+
)
53+
54+
checkpoint_list = [enums.TestStartPoints.BEGINNING]
55+
if test_start_point in checkpoint_list:
56+
### Load ptycho input data ###
57+
58+
# Define options for loading ptycho reconstructions
59+
base_load_options = BaseLoadOptions(
60+
loader_type=LoaderType.PEAR_V1,
61+
selected_experiment_name="",
62+
selected_sequences=[0],
63+
selected_ptycho_strings=[
64+
"Ndp64_LSQML_c12556_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
65+
"Ndp64_LSQML_c7687_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
66+
"Ndp64_LSQML_c7867_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
67+
"Ndp64_LSQML_c12474_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
68+
"Ndp64_LSQML_c7484_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
69+
"Ndp64_LSQML_c12461_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
70+
"Ndp64_LSQML_c12507_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
71+
"Ndp64_LSQML_c12479_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
72+
"Ndp64_LSQML_c12459_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
73+
"Ndp64_LSQML_c7449_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
74+
"Ndp64_LSQML_c8104_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
75+
"Ndp64_LSQML_c7735_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
76+
"Ndp64_LSQML_c12482_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
77+
"Ndp64_LSQML_c7688_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
78+
"Ndp64_LSQML_c12463_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
79+
"Ndp64_LSQML_c7885_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
80+
"Ndp64_LSQML_c7762_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
81+
"Ndp64_LSQML_c12508_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
82+
"Ndp64_LSQML_c12518_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
83+
"Ndp64_LSQML_c12562_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
84+
"Ndp64_LSQML_c12541_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
85+
"Ndp64_LSQML_c12561_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
86+
"Ndp64_LSQML_c7717_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
87+
"Ndp64_LSQML_c7707_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
88+
"Ndp64_LSQML_c12331_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
89+
"Ndp64_LSQML_c12545_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
90+
"Ndp64_LSQML_c12435_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
91+
"Ndp64_LSQML_c12504_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
92+
"Ndp64_LSQML_c12488_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
93+
"Ndp64_LSQML_c12468_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
94+
"Ndp64_LSQML_c12493_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
95+
"Ndp64_LSQML_c7256_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
96+
"Ndp64_LSQML_c7743_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
97+
"Ndp64_LSQML_c12559_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
98+
"Ndp64_LSQML_c12476_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
99+
"Ndp64_LSQML_c12531_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
100+
"Ndp64_LSQML_c7946_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
101+
"Ndp64_LSQML_c12488_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
102+
"Ndp64_LSQML_c7808_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
103+
"Ndp64_LSQML_c12484_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
104+
"Ndp64_LSQML_c12554_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
105+
"Ndp64_LSQML_c12479_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
106+
"Ndp64_LSQML_c12469_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
107+
"Ndp64_LSQML_c7842_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
108+
"Ndp64_LSQML_c12460_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
109+
"Ndp64_LSQML_c7849_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
110+
"Ndp64_LSQML_c12186_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
111+
"Ndp64_LSQML_c12523_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
112+
"Ndp64_LSQML_c12502_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
113+
"Ndp64_LSQML_c12487_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
114+
"Ndp64_LSQML_c12314_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
115+
"Ndp64_LSQML_c12544_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
116+
"Ndp64_LSQML_c12525_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
117+
"Ndp64_LSQML_c7381_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
118+
"Ndp64_LSQML_c7608_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
119+
"Ndp64_LSQML_c12480_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
120+
"Ndp64_LSQML_c7804_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
121+
"Ndp64_LSQML_c7773_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
122+
"Ndp64_LSQML_c12515_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
123+
"Ndp64_LSQML_c7561_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
124+
"Ndp64_LSQML_c7716_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
125+
"Ndp64_LSQML_c8035_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
126+
"Ndp64_LSQML_c12561_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
127+
"Ndp64_LSQML_c12512_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
128+
"Ndp64_LSQML_c12490_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
129+
"Ndp64_LSQML_c12527_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
130+
"Ndp64_LSQML_c7684_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
131+
"Ndp64_LSQML_c12442_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
132+
"Ndp64_LSQML_c12533_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
133+
"Ndp64_LSQML_c12562_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
134+
"Ndp64_LSQML_c7933_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
135+
"Ndp64_LSQML_c7828_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
136+
"Ndp64_LSQML_c12471_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
137+
"Ndp64_LSQML_c12528_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
138+
"Ndp64_LSQML_c12505_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
139+
"Ndp64_LSQML_c12467_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
140+
"Ndp64_LSQML_c7908_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
141+
"Ndp64_LSQML_c12553_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
142+
"Ndp64_LSQML_c8061_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
143+
"Ndp64_LSQML_c12509_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
144+
"Ndp64_LSQML_c12555_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
145+
"Ndp64_LSQML_c7572_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
146+
"Ndp64_LSQML_c12535_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
147+
"Ndp64_LSQML_c7942_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
148+
"Ndp64_LSQML_c12511_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
149+
"Ndp64_LSQML_c12401_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
150+
"Ndp64_LSQML_c12557_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
151+
"Ndp64_LSQML_c12474_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
152+
"Ndp64_LSQML_c7473_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
153+
"Ndp64_LSQML_c12526_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
154+
"Ndp64_LSQML_c8003_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
155+
"Ndp64_LSQML_c7870_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
156+
"Ndp64_LSQML_c12056_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
157+
"Ndp64_LSQML_c8067_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
158+
"Ndp64_LSQML_c8082_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
159+
"Ndp64_LSQML_c12540_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
160+
"Ndp64_LSQML_c12524_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
161+
"Ndp64_LSQML_c8044_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
162+
"Ndp64_LSQML_c12500_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
163+
"Ndp64_LSQML_c12560_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
164+
"Ndp64_LSQML_c12457_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
165+
"Ndp64_LSQML_c12481_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
166+
"Ndp64_LSQML_c12558_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
167+
"Ndp64_LSQML_c12552_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
168+
"Ndp64_LSQML_c7916_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
169+
"Ndp64_LSQML_c12485_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
170+
"Ndp64_LSQML_c12516_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
171+
"Ndp64_LSQML_c7865_m0.5_gaussian_p10_mm_ic_pc_g_ul0.1/recon_Niter5000",
172+
"Ndp64_LSQML_c12492_m0.5_gaussian_p10_mm_ic_pc_ul0.1/recon_Niter5000",
173+
],
174+
scan_start=115,
175+
scan_end=264,
176+
)
177+
options = Beamline2IDELoadOptions(
178+
mda_folder=os.path.join(ci_test_helper.inputs_folder, "mda"),
179+
base=base_load_options,
180+
)
181+
182+
# Load data
183+
standard_data = pyxalign.io.loaders.load_data_from_lamni_format(
184+
parent_projections_folder=os.path.join(ci_test_helper.inputs_folder, "ptychi_recons"),
185+
n_processes=int(mp.cpu_count() * 0.8),
186+
options=options,
187+
)
188+
189+
w = 256
190+
new_shape = 576 + w, 832 + w
191+
projection_array = convert_projection_dict_to_array(
192+
standard_data.projections,
193+
delete_projection_dict=False,
194+
pad_with_mode=True,
195+
new_shape=new_shape,
196+
)
197+
198+
199+
scan_10 = standard_data.scan_numbers[10]
200+
ci_test_helper.save_or_compare_results(standard_data.probe, "standard_data_probe")
201+
ci_test_helper.save_or_compare_results(standard_data.scan_numbers, "standard_data_scan_numbers")
202+
ci_test_helper.save_or_compare_results(standard_data.angles, "standard_data_angles")
203+
ci_test_helper.save_or_compare_results(projection_array[10], "projection_array_10")
204+
ci_test_helper.save_or_compare_results(
205+
standard_data.probe_positions[scan_10], "probe_positions_10"
206+
)
207+
208+
ci_test_helper.finish_test()
209+
210+
211+
if __name__ == "__main__":
212+
ci_parser = CITestArgumentParser()
213+
args = ci_parser.parser.parse_args()
214+
run_full_test_xrf_ptycho_1(
215+
update_tester_results=args.update_results,
216+
save_temp_files=args.save_temp_results,
217+
test_start_point=args.start_point,
218+
)

0 commit comments

Comments
 (0)