Exemplo n.º 1
0
def build_beamline():
    bl = raycing.BeamLine()
    bl.source = LSource(bl,
                        nrays=nrays,
                        energies=[E0, dE],
                        enstep=enstep,
                        distx='flat',
                        dx=[-bsize[0] / 2, bsize[0] / 2],
                        distz='flat',
                        dz=[-bsize[1] / 2, bsize[1] / 2],
                        distxprime='flat',
                        dxprime=[-bdiv[0], bdiv[0]],
                        distzprime='flat',
                        dzprime=[-bdiv[1], bdiv[1]])

    bl.mirr = PMirror(bl,
                      center=mirr_pos,
                      material=mL,
                      pitch=braggML,
                      limPhysY=[-mirr_len / 2, mirr_len / 2],
                      limPhysX=[-mirr_width / 2, mirr_width / 2],
                      f1=mirr_p,
                      slope_error=slope_error)

    bl.s0 = Screen(bl, center=mirr_pos)
    bl.det = Screen(bl,
                    center=mirr_pos + n1 * 100,
                    z=get_perpendicular_vector(n1))
    return bl
Exemplo n.º 2
0
def build_beamline():
    bl = raycing.BeamLine()

    # Source
    bl.source = LCLS_source(bl=bl, instrument=instrument, **source_kwargs)

    # Optical elements
    oes = []
    print('OEs position:')
    for kwargs in oes_kwargs:
        if 'crystal' in kwargs['name']:
            oes.append(OE(bl=bl, **kwargs))
        elif 'parabolic_mirror' in kwargs['name']:
            oes.append(ParabolicalMirrorParam(bl=bl, **kwargs))
        elif 'elliptical_mirror' in kwargs['name']:
            oes.append(EllipticalMirrorParam(bl=bl, **kwargs))
        elif 'flat_mirror' in kwargs['name']:
            oes.append(OE(bl=bl, **kwargs))
        print(oes[-1].center)
    bl.oes = oes

    # Screens
    print('\nScreens position:')
    for kwargs in s_kwargs:
        Screen(bl=bl, **kwargs)
        print(bl.screens[-1].center)
    # manual screens:
    bl.on_focus = Screen(bl=bl, **focus_kwargs)
    print('Focus:' + str(bl.screens[-1].center))
    bl.detector = Screen(bl=bl, **detector_kwargs)
    print('Detector:' + str(bl.screens[-1].center))
    print('\n')
    return bl
Exemplo n.º 3
0
def build_beamline():
    bl = raycing.BeamLine()

    # Source
    bl.source = GeometricSource(bl=bl,
                                dx=0.02,
                                dz=0.02,
                                dxprime=4E-6,
                                dzprime=4E-6,
                                energies=[E0])
    # bl.source = GeometricSource(
    #     bl=bl, dx=0.02, dz=0.02, dxprime=0, dzprime=0, energies=[E0])

    # Optical elements
    bl.oes = []
    ParabolicalMirrorParam(bl=bl,
                           center=np.array([0, D, 0]),
                           pitch=m_pitch,
                           q=q,
                           material=m_mat,
                           isCylindrical=True,
                           limPhysY=[-200, 200])

    ParabolicalMirrorParam(bl=bl,
                           center=bl.oes[0].center + 2 * q * n,
                           pitch=-m_pitch,
                           positionRoll=np.pi,
                           p=q,
                           material=m_mat,
                           isCylindrical=True,
                           limPhysY=[-200, 200])

    # Screens
    bl.s1 = Screen(bl=bl, name='source', center=np.asarray(bl.source.center))
    bl.s2 = Screen(bl=bl,
                   name='focus',
                   center=bl.oes[0].center + q * n,
                   z=get_perpendicular_vector(n))
    bl.s3 = Screen(
        bl=bl,
        name='detector',
        center=bl.oes[1].center + np.array([0, 300, 0]),
    )

    print('\n\n')
    print('OEs position:')
    print(bl.oes[0].center)
    print(bl.oes[1].center)
    print('\n')
    print('\nScreens position:')
    print(bl.s1.center)
    print(bl.s2.center)
    print(bl.s3.center)
    print('\n\n')
    return bl
Exemplo n.º 4
0
def build_beamline():
    bl = raycing.BeamLine()

    # Source and optical elements
    bl.source = GeometricSource(bl=bl, **oes_kwargs[0])
    oes = []
    print('OEs position:')
    for kwargs in oes_kwargs[1:]:
        if 'crystal' in kwargs['name']:
            oes.append(OE(bl=bl, **kwargs))
        elif 'parabolic_mirror' in kwargs['name']:
            oes.append(ParabolicalMirrorParam(bl=bl, **kwargs))
        elif 'flat_mirror' in kwargs['name']:
            oes.append(OE(bl=bl, **kwargs))
        elif 'crl' in kwargs['name']:
            oes.append(DoubleParaboloidLens(bl=bl, **kwargs))
        elif 'slits' in kwargs['name']:
            oes.append(RectangularAperture(bl=bl, **kwargs))
        else:
            print('OE not implemented (build beamline)')
        print('\t' + oes[-1].name + ': ' + str(oes[-1].center))
    bl.oes = oes

    # Screens
    print('\nScreens position:')
    for kwargs in screens_kwargs:
        Screen(bl=bl, **kwargs)
        print('\t' + kwargs['name'] + ': ' + str(bl.screens[-1].center))
    print('\n')
    return bl
def build_beamline():
    bl = raycing.BeamLine()

    # Source
    bl.source = LCLS_source(bl=bl, instrument=instrument, **source_kwargs)

    # Crystals
    xtals = []
    for kwargs in xtal_kwargs:
        xtals.append(OE(bl=bl, **kwargs))
    bl.xtals = xtals

    # Screens
    for kwargs in s_kwargs:
        Screen(bl=bl, **kwargs)
    bl.detector = Screen(bl=bl, **detector_kwargs)
    return bl
Exemplo n.º 6
0
def build_beamline():
    bl = raycing.BeamLine()

    # Source
    # bl.source = LCLS_source(bl=bl, instrument=instrument, **source_kwargs)
    pop = source_kwargs.pop('d_offset')
    # bl.source = GeometricSource(bl=bl, dx=100e-6, dz=100e-6, dxprime=2e-6, \
    #     dzprime=2e-6, **source_kwargs)
    bl.source = GeometricSource(bl=bl, dx=100e-6, dz=100e-6, dxprime=0, \
        dzprime=0, **source_kwargs)

    # Optical elements
    oes = []
    print('OEs position:')
    for kwargs in oes_kwargs:
        if 'crystal' in kwargs['name']:
            oes.append(OE(bl=bl, **kwargs))
        elif 'parabolic_mirror' in kwargs['name']:
            oes.append(ParabolicalMirrorParam(bl=bl, **kwargs))
        elif 'flat_mirror' in kwargs['name']:
            oes.append(OE(bl=bl, **kwargs))
        elif 'rectangular_aperture' in kwargs['name']:
            oes.append(RectangularAperture(bl=bl, **kwargs))
        else:
            print('OE not implemented (build beamline)')
        print('\t' + oes[-1].name + ': ' + str(oes[-1].center))
    bl.oes = oes

    # Screens
    print('\nScreens position:')
    for kwargs in s_kwargs:
        Screen(bl=bl, **kwargs)
        print('\t' + str(bl.screens[-1].center))
    for kwargs in special_screens_kwargs:
        Screen(bl=bl, **kwargs)
        print('\t' + str(bl.screens[-1].name) + ': ' +
              str(bl.screens[-1].center))

    # bl.on_focus = Screen(bl=bl, **focus_kwargs)
    # print('Focus:' + str(bl.screens[-1].center))
    # bl.detector = Screen(bl=bl, **detector_kwargs)
    # print('Detector:' + str(bl.screens[-1].center))
    print('\n')
    return bl
Exemplo n.º 7
0
def build_beamline():

    ## beamline
    BL = raycing.BeamLine()

    BL.source = LSource(BL,
                        nrays=nrays,
                        energies=[E0, dE],
                        enstep=enstep,
                        ensig=ensig,
                        enmix=enmix,
                        distx='flat',
                        dx=[-bsize[0] / 2, bsize[0] / 2],
                        distz='flat',
                        dz=[-bsize[1] / 2, bsize[1] / 2],
                        distxprime='flat',
                        dxprime=[-bdiv[0], bdiv[0]],
                        distzprime='flat',
                        dzprime=[-bdiv[1], bdiv[1]])

    BL.c1 = OE(BL, center=c1_pos, material=c_1, pitch=c1_pitch, alpha=alpha_1)
    BL.c2 = OE(BL,
               center=c2_pos,
               material=c_2,
               positionRoll=pi,
               pitch=c2_pitch,
               alpha=alpha_2)
    BL.c3 = OE(BL,
               center=c3_pos,
               material=c_3,
               positionRoll=pi,
               pitch=c3_pitch,
               alpha=alpha_3)
    BL.c4 = OE(BL, center=c4_pos, material=c_4, pitch=c4_pitch, alpha=alpha_4)
    BL.c5 = OE(BL, center=c5_pos, material=c_5, pitch=c5_pitch, alpha=alpha_5)
    BL.c6 = OE(BL,
               center=c6_pos,
               material=c_6,
               positionRoll=pi,
               pitch=c6_pitch,
               alpha=alpha_6)

    #BL.slt1 = RectangularAperture(BL, center=slit_pos,
    #                              opening=[-0.2, 0.2, -1, 1])

    ## virtual screens
    BL.s0 = Screen(BL, center=c1_pos)
    BL.s1 = Screen(BL, center=c2_pos, z=[0, -sin(c1_out), cos(c1_out)])
    BL.s2 = Screen(BL, center=c3_pos, z=[0, -sin(c2_out), cos(c2_out)])
    BL.s3 = Screen(BL, center=c4_pos, z=[0, -sin(c3_out), cos(c3_out)])
    BL.s4 = Screen(BL, center=c5_pos, z=[0, -sin(c4_out), cos(c5_out)])
    BL.s5 = Screen(BL, center=c6_pos, z=[0, -sin(c5_out), cos(c6_out)])
    BL.s6 = Screen(BL,
                   center=c6_pos + [0, 1000, 0],
                   z=[0, -sin(c6_out), cos(c6_out)])

    return BL
Exemplo n.º 8
0
def build_beamline():

    ## beamline
    BL = raycing.BeamLine()

    BL.source = LSource(BL,
                        nrays=nrays,
                        energies=[E0, dE],
                        enstep=enstep,
                        ensig=ensig,
                        enmix=enmix,
                        distx='flat',
                        dx=[-bsize[0] / 2, bsize[0] / 2],
                        distz='flat',
                        dz=[-bsize[1] / 2, bsize[1] / 2],
                        distxprime='flat',
                        dxprime=[-bdiv[0], bdiv[0]],
                        distzprime='flat',
                        dzprime=[-bdiv[1], bdiv[1]])

    BL.mirr1 = PMirror(BL,
                       center=mirr1_pos,
                       material=mL,
                       pitch=braggML,
                       limPhysY=[-mirr_len / 2, mirr_len / 2],
                       limPhysX=[-mirr_width / 2, mirr_width / 2],
                       f1=mirr1_p,
                       slope_error=slope_error)

    BL.xtal1 = OE(BL,
                  center=xtal1_pos,
                  material=crystalGe,
                  pitch=xtal1_pitch,
                  alpha=alphaGe)

    BL.xtal2 = OE(BL,
                  center=xtal2_pos,
                  material=crystalGe,
                  pitch=xtal2_pitch,
                  alpha=alphaGe2)

    BL.mirr2 = PMirror(BL,
                       center=mirr2_pos,
                       material=mL,
                       pitch=braggML2,
                       extraPitch=xtal2_out,
                       limPhysY=[-mirr_len / 2, mirr_len / 2],
                       limPhysX=[-mirr_width / 2, mirr_width / 2],
                       f2=mirr2_q,
                       slope_error=slope_error)

    BL.slt1 = RectangularAperture(BL,
                                  center=slit_pos,
                                  opening=[-10.2, 10.2, -10, 10])

    ## virtual screens
    BL.s0 = Screen(BL, center=mirr1_pos)
    BL.s1 = Screen(BL,
                   center=xtal1_pos,
                   z=[0, -sin(mirr1_out), cos(mirr1_out)])
    BL.s2 = Screen(BL,
                   center=xtal2_pos,
                   z=[0, -sin(xtal1_out), cos(xtal1_out)])
    BL.s3 = Screen(BL,
                   center=mirr2_pos,
                   z=[0, -sin(xtal2_out), cos(xtal2_out)])
    BL.sdebug = Screen(BL,
                       center=xtal2_pos + n[3] * 15,
                       z=[0, -sin(xtal2_out),
                          cos(xtal2_out)])

    ## detector screen, generally placed at 2nd montel focal point
    s4_pos = [
        0, mirr2_pos[1] - det_mirr2 * cos(pi - mirr2_out),
        mirr2_pos[2] + det_mirr2 * sin(pi - mirr2_out)
    ]

    s4_ang = [
        0, -sin(mirr2_out + det_ang_offset),
        cos(mirr2_out + det_ang_offset)
    ]

    BL.s4 = Screen(BL, center=s4_pos, z=s4_ang)

    return BL