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)
Exemple #2
0
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
Exemple #3
0
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
Exemple #4
0
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
Exemple #5
0
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