def test_patch_pims_with_one_bounce_func(simple_two_bounce_system): s, m1, m2 = simple_two_bounce_system pim_1 = [pim.PIM('test_pim', name='pim_1', z=13)] pim_2 = [pim.PIM('test_pim', name='pim_1', z=15)] pim_1 = patch_pims(pim_1, [m1, m2]) assert pim_1.detector.stats2.centroid.x.value == _m1_calc_cent_x( s, m1, pim_1) pim_2 = patch_pims(pim_2, m1) assert pim_2.detector.stats2.centroid.x.value == _m1_calc_cent_x( s, m1, pim_2)
def one_bounce_system(): """ Generic single bounce system consisting one mirror with a linear relationship with YAG centroid """ s = source.Undulator('test_source', name='test_source') mot = mirror.OffsetMirror('mirror', 'mirror_xy', name='mirror', z=50) det = pim.PIM('yag', name='yag', z=60, size=(500, 500)) det = patch_pims(det, mot) return s, mot, det
def lcls_two_bounce_system(): """ Simple system that consists of a source, two mirrors, and two imagers. """ s = source.Undulator('test_undulator', name='test_undulator') m1 = mirror.OffsetMirror('test_m1h', 'test_m1h_xy', name='test_m1h', z=90.510, alpha=0.0014 * 1e6) m2 = mirror.OffsetMirror('test_m2h', 'test_m2h_xy', name='test_m2h', x=0.0317324, z=101.843, alpha=0.0014 * 1e6) y1 = pim.PIM('test_p3h', name='test_p3h', x=0.0317324, z=103.660) y2 = pim.PIM('test_dg3', name='test_dg3', x=0.0317324, z=375.000) # Patch with calculated centroids patch_pims([y1, y2], mirrors=[m1, m2], source=s) return s, m1, m2, y1, y2
def slow_lcls_two_bounce_system(): """ Simple system that consists of a source, two mirrors, and two imagers. """ s = source.Undulator('test_undulator', name='test_undulator') m1 = SlowOffsetMirror('test_m1h', 'test_m1h_xy', name='test_m1h', z=90.510, alpha=0.0014) m2 = SlowOffsetMirror('test_m2h', 'test_m2h_xy', name='test_m2h', x=0.0317324, z=101.843, alpha=0.0014) y1 = pim.PIM('test_p3h', name='test_p3h', x=0.0317324, z=103.660) y2 = pim.PIM('test_dg3', name='test_dg3', x=0.0317324, z=375.000) patch_pims([y1, y2], mirrors=[m1, m2], source=s) def make_update_pixel(yag): def update_pixel(*args, **kwargs): sig = yag.detector.stats2.centroid.x sig._run_subs(sub_type=sig.SUB_VALUE, value=sig.value, timestamp=time.time()) return update_pixel m1.subscribe(make_update_pixel(y1), m1.SUB_READBACK) m2.subscribe(make_update_pixel(y2), m2.SUB_READBACK) m1.pitch._limits = (1000, 2000) m2.pitch._limits = (1000, 2000) return s, m1, m2, y1, y2
def fake_yags(): yags = [ pim.PIM("p1h", name="p1h"), pim.PIM("p2h", name="p2h", z=20), pim.PIM("p3h", name="p3h", z=40), pim.PIM("hx2_pim", name="hx2_pim", z=50), pim.PIM("um6_pim", name="um6_pim", z=60), pim.PIM("dg3_pim", name="dg3_pim", z=70) ] # Pretend that the correct values are the current values ans = [ y.read()[y.name + '_detector_stats2_centroid_x']['value'] for y in yags ] return yags, ans