Ejemplo n.º 1
0
def build_beamline(nrays=raycing.nrays):
    fixedExit = 15.

    beamLine = raycing.BeamLine(azimuth=0, height=0)
    rs.GeometricSource(
        beamLine, 'GeometricSource', (0, 0, -fixedExit),
        nrays=nrays, dx=5., dy=0, dz=5., dxprime=0., dzprime=0.,
        distE='flat', energies=eLimits, polarization='horizontal')

    p = 20000.
    si111 = rm.CrystalSi(hkl=(1, 1, 1), tK=-171+273.15)
    beamLine.dcm = roe.DCM(beamLine, 'DCM', (0, p - 2000, -fixedExit),
                           surface=('Si111',), material=(si111,))
    beamLine.dcm.bragg = math.asin(rm.ch / (2 * si111.d * E0))
    beamLine.dcm.cryst2perpTransl = fixedExit/2./math.cos(beamLine.dcm.bragg)

    beamLine.fsm1 = rsc.Screen(beamLine, 'FSM1', (0, p - 1000, 0))

    beamLine.qwp = roe.LauePlate(beamLine, 'QWP', (0, p, 0),
                                 material=(crystalDiamond,))
    beamLine.qwp.pitch = theta0 + math.pi/2
    q = 50.
    beamLine.fsm2 = rsc.Screen(beamLine, 'FSM2', (0, p + q, 0))

    return beamLine
Ejemplo n.º 2
0
def build_beamline(nrays=raycing.nrays):
    fixedExit = 15.

    beamLine = raycing.BeamLine(azimuth=0, height=0)
    hDiv = 1.5e-3
    vDiv = 2.5e-4
    beamLine.source = rs.GeometricSource(beamLine,
                                         'GeometricSource', (0, 0, 0),
                                         nrays=nrays,
                                         dx=0.1,
                                         dy=0,
                                         dz=2.,
                                         dxprime=hDiv / 2,
                                         dzprime=0,
                                         distE='flat',
                                         energies=eLimits,
                                         polarization='horizontal')

    beamLine.feMovableMask = ra.RectangularAperture(
        beamLine, 'FEMovableMask', [0, 10000, 0],
        ('left', 'top', 'right', 'bottom'), [-10, 3., 10, -3.])
    beamLine.feMovableMask.set_divergence(
        beamLine.source, [-hDiv / 2, vDiv / 2, hDiv / 2, -vDiv / 2])

    yDCM = 21000.
    si111 = rm.CrystalSi(hkl=(1, 1, 1), tK=-171 + 273.15)
    beamLine.dcm = roe.DCM(beamLine,
                           'DCM', (0, yDCM, 0),
                           surface=('Si111', ),
                           material=(si111, ))
    beamLine.dcm.bragg = math.asin(rm.ch / (2 * si111.d * E0))
    beamLine.dcm.cryst2perpTransl = fixedExit / 2. / math.cos(
        beamLine.dcm.bragg)

    beamLine.fsm1 = rsc.Screen(beamLine, 'FSM1', (0, yDCM + 700, 0))

    yVFM = 24000.
    beamLine.vfm = roe.ToroidMirror(beamLine,
                                    'VFM', (0, yVFM, fixedExit),
                                    pitch=4.0e-3)
    beamLine.vfm.R = yVFM / beamLine.vfm.pitch
    beamLine.vfm.r = 2. / 3. * yVFM * beamLine.vfm.pitch
    yFlatMirror = yVFM + 2000.
    zFlatMirror = (yFlatMirror - yVFM) * 2. * beamLine.vfm.pitch + fixedExit
    beamLine.vdm = roe.OE(beamLine,
                          'FlatMirror', (0, yFlatMirror, zFlatMirror),
                          pitch=-beamLine.vfm.pitch,
                          positionRoll=math.pi)

    ySample = 1.5 * yVFM
    yQWP = ySample - 3000.
    beamLine.qwp = roe.OE(beamLine,
                          'QWP', (0, yQWP, zFlatMirror),
                          roll=math.pi / 4,
                          material=(crystalDiamond, ))
    beamLine.qwp.pitch = theta0

    beamLine.fsm2 = rsc.Screen(beamLine, 'FSM2', (0, ySample, zFlatMirror))

    return beamLine
Ejemplo n.º 3
0
 def __init__(self, hkl=[1, 1, 1], tempC=-140, gap=5):
     if isinstance(hkl, str): hkl = [int(i) for i in hkl]
     cryst_name = f"Si{hkl[0]}{hkl[1]}{hkl[2]}"
     self.name = cryst_name
     self.temperature = 273.15 + tempC
     self.gap = gap
     self.cryst = rmats.CrystalSi(hkl=hkl,
                                  name=cryst_name,
                                  tK=self.temperature)
     self.dcm = roes.DCM(name=r"DCM",
                         material=self.cryst,
                         material2=self.cryst,
                         cryst2perpTransl=gap)
def build_beamline():
    beamLine = raycing.BeamLine(alignE=10000)

    beamLine.Wiggler = rsources.Wiggler(bl=beamLine,
                                        name=r"Flat-Top Wiggler",
                                        center=[0, 0, 0],
                                        nrays=500000,
                                        eE=2.9,
                                        eI=0.25,
                                        eEpsilonX=18.1,
                                        eEpsilonZ=0.0362,
                                        betaX=9.1,
                                        betaZ=2.8,
                                        xPrimeMax=0.3,
                                        zPrimeMax=0.005,
                                        eMin=9995,
                                        eMax=10005,
                                        K=35,
                                        period=150,
                                        n=11)

    beamLine.Generic_DCM = roes.DCM(bl=beamLine,
                                    name=r"Generic DCM",
                                    center=[0, 25300, 0],
                                    bragg=[10000],
                                    material=Si111,
                                    material2=Si111,
                                    cryst2perpTransl=6.5023)

    beamLine.Aperture = rapts.RectangularAperture(bl=beamLine,
                                                  name=r"Aperture",
                                                  center=[0, 28300, r"auto"],
                                                  opening=[-10, 10, -0.1, 0.1])

    beamLine.FSM = rscreens.Screen(bl=beamLine,
                                   name=r"FSM",
                                   center=[0, 30650, r"auto"])

    return beamLine
Ejemplo n.º 5
0
def build_beamline(nrays=1e4,
                   hkl=(1, 1, 1),
                   stripe='Si',
                   eMinRays=2400,
                   eMaxRays=45000):
    filterDiamond = rm.Material('C', rho=3.52, kind='plate')
    if stripe.startswith('S'):
        materialVCM = stripeSi
        materialVFM = stripeSiO2
    elif stripe.startswith('I'):
        materialVCM = stripeIr
        materialVFM = stripeIr
    else:
        raise ('Don' 't know the mirror material')
    height = 0
    beamLine = raycing.BeamLine(azimuth=0, height=height)

    wigglerToStraightSection = 0
    xWiggler = wigglerToStraightSection * beamLine.sinAzimuth
    yWiggler = wigglerToStraightSection * beamLine.cosAzimuth
    #    rs.WigglerWS(
    #        beamLine, name='SoleilW50', center=(xWiggler, yWiggler, height),
    #        nrays=nrays, period=50., K=8.446, n=39, eE=3., eI=0.5,
    #        eSigmaX=48.66, eSigmaZ=6.197, eEpsilonX=0.263, eEpsilonZ=0.008,
    #        eMin=50, eMax=60050, eMinRays=eMinRays, eMaxRays=eMaxRays, eN=2000,
    #        xPrimeMax=0.22, zPrimeMax=0.06, nx=40, nz=10)
    rs.Wiggler(beamLine,
               name='SoleilW50',
               center=(xWiggler, yWiggler, height),
               nrays=nrays,
               period=50.,
               K=8.446,
               n=39,
               eE=3.,
               eI=0.5,
               eSigmaX=48.66,
               eSigmaZ=6.197,
               eEpsilonX=0.263,
               eEpsilonZ=0.008,
               eMin=eMinRays,
               eMax=eMaxRays,
               xPrimeMax=0.22,
               zPrimeMax=0.06)

    beamLine.fsm0 = rsc.Screen(beamLine, 'FSM0', (0, 15000, height))
    beamLine.feFixedMask = ra.RectangularAperture(
        beamLine, 'FEFixedMask', (0, 15750, height),
        ('left', 'right', 'bottom', 'top'), [-3.15, 3.15, -0.7875, 0.7875])
    beamLine.fsmFE = rsc.Screen(beamLine, 'FSM-FE', (0, 16000, height))

    beamLine.filter1 = roe.Plate(beamLine,
                                 'Filter1', (0, 23620, height),
                                 pitch=math.pi / 2,
                                 limPhysX=(-9., 9.),
                                 limPhysY=(-4., 4.),
                                 surface='diamond 60 $\mu$m',
                                 material=filterDiamond,
                                 t=0.06,
                                 alarmLevel=0.)
    if stripe.startswith('I'):
        beamLine.filter2 = roe.Plate(beamLine,
                                     'Filter2', (0, 23720, height),
                                     pitch=math.pi / 2,
                                     limPhysX=(-9., 9.),
                                     limPhysY=(-4., 4.),
                                     surface='diamond 0.4 mm',
                                     material=filterDiamond,
                                     t=0.4,
                                     alarmLevel=0.)

    beamLine.vcm = roe.SimpleVCM(beamLine,
                                 'VCM', [0, 25290, height],
                                 surface=('Si', ),
                                 material=(materialVCM, ),
                                 limPhysX=(-15., 15.),
                                 limPhysY=(-680., 680.),
                                 limOptX=(-6, 6),
                                 limOptY=(-670., 670.),
                                 R=5.0e6,
                                 pitch=2e-3,
                                 alarmLevel=0.)
    beamLine.fsmVCM = rsc.Screen(beamLine, 'FSM-VCM', (0, 26300, height))

    beamLine.dmm = roe.DCM(
        beamLine,
        'DMM',
        [0, 27060, height],
        surface=('mL1', ),
        material=(mL, ),
        material2=(mL, ),
        limPhysX=(-12, 12),
        limPhysY=(-150, 150),
        cryst2perpTransl=20,
        cryst2longTransl=100,
        limPhysX2=(-12, 12),
        limPhysY2=(-200, 200),
        #        targetOpenCL='auto',
        targetOpenCL='CPU',
        alarmLevel=0.05)

    beamLine.BSBlock = ra.RectangularAperture(beamLine,
                                              'BSBlock', (0, 29100, height),
                                              ('bottom', ), (22, ),
                                              alarmLevel=0.)
    beamLine.slitAfterDCM = ra.RectangularAperture(
        beamLine,
        'SlitAfterDCM', (0, 29200, height), ('left', 'right', 'bottom', 'top'),
        [-7, 7, -2, 2],
        alarmLevel=0.5)
    beamLine.fsmDCM = rsc.Screen(beamLine, 'FSM-DCM', (0, 29400, height))

    beamLine.vfm = roe.SimpleVFM(beamLine,
                                 'VFM', [0, 30575, height],
                                 surface=('SiO2', ),
                                 material=(materialVFM, ),
                                 limPhysX=(-20., 20.),
                                 limPhysY=(-700., 700.),
                                 limOptX=(-10, 10),
                                 limOptY=(-700, 700),
                                 positionRoll=math.pi,
                                 R=5.0e6,
                                 r=40.77,
                                 alarmLevel=0.2)
    beamLine.slitAfterVFM = ra.RectangularAperture(
        beamLine,
        'SlitAfterVFM', (0, 31720, height), ('left', 'right', 'bottom', 'top'),
        [-7, 7, -2, 2],
        alarmLevel=0.5)
    beamLine.fsmVFM = rsc.Screen(beamLine, 'FSM-VFM', (0, 32000, height))
    beamLine.ohPS = ra.RectangularAperture(beamLine,
                                           'OH-PS', (0, 32070, height),
                                           ('left', 'right', 'bottom', 'top'),
                                           (-20, 20, 25, 55),
                                           alarmLevel=0.2)

    beamLine.slitEH = ra.RectangularAperture(
        beamLine,
        'slitEH', (0, 43000, height), ('left', 'right', 'bottom', 'top'),
        [-20, 20, -7, 7],
        alarmLevel=0.5)
    beamLine.fsmSample = rsc.Screen(beamLine, 'FSM-Sample', (0, 45863, height))

    return beamLine