Пример #1
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
Пример #2
0
def build_beamline(und_x, und_xp, und_y, und_yp, und_z, p1h_x, p1h_z, m1h_x,
                   m1h_alpha, m1h_z, p2h_x, p2h_z, m2h_x, m2h_alpha, m2h_z,
                   p3h_x, p3h_z, dg3_x, dg3_z):
    HOMS = raycing.BeamLine()

    HOMS.Source = rsources.GeometricSource(bl=HOMS,
                                           name=None,
                                           center=[-und_x, und_z, und_y],
                                           dx=0.1,
                                           dz=0.1,
                                           dxprime=0.0000005,
                                           dzprime=0.0000005)

    HOMS.P1H = rscreens.Screen(bl=HOMS,
                               name=None,
                               center=[-p1h_x * 1e3, p1h_z * 1e3, 0])

    HOMS.M1H = roes.OE(bl=HOMS,
                       name=None,
                       center=[-m1h_x * 1e3, m1h_z * 1e3, 0],
                       pitch=m1h_alpha,
                       positionRoll=-np.pi / 2)

    HOMS.P2H = rscreens.Screen(bl=HOMS,
                               name=None,
                               center=[-p2h_x * 1e3, p2h_z * 1e3, 0])

    HOMS.M2H = roes.OE(bl=HOMS,
                       name=None,
                       center=[-m2h_x * 1e3, m2h_z * 1e3, 0],
                       pitch=-m2h_alpha,
                       positionRoll=np.pi / 2)

    HOMS.P3H = rscreens.Screen(bl=HOMS,
                               name=None,
                               center=[-p3h_x * 1e3, p3h_z * 1e3, 0])

    HOMS.DG3 = rscreens.Screen(bl=HOMS,
                               name=None,
                               center=[-dg3_x * 1e3, dg3_z * 1e3, 0])

    return HOMS
Пример #3
0
def build_beamline():
    HOMS = raycing.BeamLine()

    HOMS.Source = rsources.GeometricSource(bl=HOMS,
                                           name=None,
                                           center=[0, 0, 0],
                                           dx=0.1,
                                           dz=0.1,
                                           dxprime=0.0000005,
                                           dzprime=0.0000005)

    HOMS.P1H = rscreens.Screen(bl=HOMS, name=None, center=[0, 89894, 0])

    HOMS.M1H = roes.OE(bl=HOMS,
                       name=None,
                       center=[0, 90510, 0],
                       pitch=0.0014,
                       positionRoll=-np.pi / 2)

    HOMS.P2H = rscreens.Screen(bl=HOMS,
                               name=None,
                               center=[-28.8904, 100828, 0])

    HOMS.M2H = roes.OE(bl=HOMS,
                       name=None,
                       center=[-31.7324, 101843, 0],
                       yaw=0.0014,
                       positionRoll=np.pi / 2)

    HOMS.P3H = rscreens.Screen(bl=HOMS,
                               name=None,
                               center=[-31.7324, 101843, 0])

    HOMS.DG3 = rscreens.Screen(bl=HOMS,
                               name=None,
                               center=[-31.7324, 101843, 0])

    return HOMS
Пример #4
0
def build_beamline(azimuth=0, nrays=raycing.nrays):
    beamLine = raycing.BeamLine(azimuth=azimuth, height=0)
    rs.GeometricSource(
        beamLine, 'MAX-IV',
        nrays=nrays, dx=0.187, dz=0.032, dxprime=77e-6, dzprime=70e-6,
        distE=distE, energies=energies, polarization='horizontal')
    beamLine.fsm0 = rsc.Screen(beamLine, 'FSM0')
    beamLine.m1 = roe.ToroidMirror(
        beamLine, 'M1', surface=('Au',), material=(mGold,),
        limPhysX=(-10., 10.), limPhysY=(-150., 150.), positionRoll=np.pi/2,
        R=1e12, alarmLevel=0.2)
    beamLine.fsm1 = rsc.Screen(beamLine, 'FSM-M1')
    beamLine.m2 = roe.OE(
        beamLine, 'M2', surface=('Au',), material=(mGold,),
        limPhysX=(-10., 10.), limPhysY=(-150., 150.), alarmLevel=0.2)
    beamLine.pg = Grating(
        beamLine, 'PlaneGrating', material=mGoldenGrating,
        positionRoll=np.pi, limPhysX=(-15., 15.), limPhysY=(-55., 55.),
        alarmLevel=0.2)
#    beamLine.pg.order = -2,-1,0,1,2,3
    beamLine.pg.order = 1
    beamLine.fsmPG = rsc.Screen(beamLine, 'FSM-PG')
    beamLine.m3 = roe.ToroidMirror(
        beamLine, 'M3', material=(mGold,),
        positionRoll=-np.pi/2, limPhysX=(-15., 15.), limPhysY=(-150., 150.),
        alarmLevel=0.2)
    beamLine.fsm3hf = rsc.Screen(beamLine, 'FSM-M3hf')
    beamLine.fsm3vf = rsc.Screen(beamLine, 'FSM-M3vf')

    beamLine.s1s = [
        ra.RectangularAperture(
            beamLine, 'vert. slit', [0, 0, 0],
            ('bottom', 'top'), [fixedExit-opening/2., fixedExit+opening/2.])
        for opening in s1openings]

    beamLine.m4 = roe.ToroidMirror(
        beamLine, 'M4', material=(mGold,),
        positionRoll=np.pi/2, limPhysX=(-15., 15.), limPhysY=(-150., 150.),
        alarmLevel=0.2)
    beamLine.fsmExp1 = rsc.Screen(beamLine, 'FSM-Exp1')
    beamLine.fsmExp2 = rsc.Screen(beamLine, 'FSM-Exp2')
    return beamLine
Пример #5
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))

    crystalDiamond = rm.CrystalDiamond((1, 1, 1),
                                       2.0592872,
                                       elements='C',
                                       geom='Bragg reflected')
    beamLine.qwp = roe.OE(beamLine,
                          'QWP', (0, p, 0),
                          material=(crystalDiamond, ))
    theta0 = math.asin(rm.ch / (2 * crystalDiamond.d * (E0 + 0.4)))
    beamLine.qwp.pitch = theta0
    q = 50.

    beamLine.fsm2 = rsc.Screen(beamLine, 'FSM2', (0, p + q, 0))

    return beamLine
Пример #6
0
def build_beamline(nrays=raycing.nrays):
    beamLine = raycing.BeamLine(height=0)
    rs.GeometricSource(beamLine,
                       'GeometricSource', (0, 0, 0),
                       nrays=nrays,
                       dx=0.,
                       dz=0.,
                       dxprime=5e-4,
                       dzprime=1e-5,
                       distE='lines',
                       energies=(E0, ),
                       polarization='horizontal')
    beamLine.fsm1 = rsc.Screen(beamLine, 'DiamondFSM1', (0, 100, 0))

    if isFlat:
        fName = 'Flat'
        beamLine.cylinder = roe.OE(beamLine,
                                   'FlatP', [0, 1000, -0.01],
                                   pitch=3e-3,
                                   material=mGold,
                                   isParametric=isParametric)
    else:
        fName = 'Cylinder'
        limPhysX = [-5, 5]
        limPhysY = [0, L]
        if isParametric:
            CylinderClass = CylinderP
        else:
            CylinderClass = Cylinder
        beamLine.cylinder = CylinderClass(beamLine,
                                          fName, [0, 1000, -0.05],
                                          pitch=3e-3,
                                          material=mGold,
                                          limPhysX=limPhysX,
                                          limPhysY=limPhysY,
                                          Rm=Rm,
                                          isParametric=isParametric)

    beamLine.fsm2 = rsc.Screen(beamLine, 'DiamondFSM2', (0, 2000, 0))
    return beamLine, fName
Пример #7
0
def build_beamline():
    beamLine = raycing.BeamLine()

    beamLine.source = rsources.GeometricSource(
        beamLine,
        center=[0, 0, 0],
        dx=2,
        dz=1,
        dxprime=25e-06,
        dzprime=25e-06,
        # distE=r"normal", energies=[Ec, 1],
        energies=[Ec],
        nrays=nrays)

    beamLine.screenSource = rscreens.Screen(beamLine, center=[0, 2000, 0])

    bragg = crystalSi.get_Bragg_angle(Ec) - crystalSi.get_dtheta(Ec, alpha)
    b = -np.sin(bragg + alpha) / np.sin(bragg - alpha)
    print('bragg={0:.3f}deg; alpha={1:.3f}deg, b={2:.3f}'.format(
        np.degrees(bragg), np.degrees(alpha), b))
    beamLine.bragg = bragg
    beamLine.xtal = roes.OE(bl=beamLine,
                            center=[0, 2000, 0],
                            material=crystalSi,
                            pitch=bragg + alpha,
                            alpha=alpha)

    p = 0
    beamLine.screenXtal = rscreens.Screen(
        beamLine,
        center=[0, 2000 + p, p * np.tan(2 * bragg)],
        x=[1, 0, 0],
        z=[0, -np.sin(2 * bragg), np.cos(2 * bragg)])

    beamLine.dbragg = crystalSi.get_refractive_correction(Ec,
                                                          alpha=alpha) * 1e6
    print(u'refractive shift = {0} µrad'.format(beamLine.dbragg))

    return beamLine
Пример #8
0
def build_beamline():
    beamLine = raycing.BeamLine()
    bragg = xtalPerfect.get_Bragg_angle(Ec) - xtalPerfect.get_dtheta(Ec)
    print('theta={0}deg'.format(np.degrees(bragg)))
    print('dtheta', xtalPerfect.get_dtheta(Ec), 'mosaicity',
          mosaicityFWHM / 2.355)
    beamLine.bragg = bragg
    print("mosaic divergence hor", 2 * mosaicityFWHM * np.sin(bragg))

    beamLine.source = rsources.GeometricSource(
        beamLine,
        center=[0, 0, 0],
        distx=None,
        disty=None,
        distz=None,

        # for reflectivity calculations select larger dzprime:
        #        distxprime=None, distzprime='flat', dzprime=0.022,
        #        distE='lines', energies=[Ec], polarization='h',
        # for getting diffracted images select this one:
        distxprime='flat',
        distzprime='flat',
        dxprime=1e-3,
        dzprime=2e-4,
        distE='flat',
        energies=(Ec - dE / 2, Ec + dE / 2),
        polarization='h',
        nrays=nrays,
        pitch=-bragg)

    beamLine.hX = p * np.tan(bragg)
    kwOE = dict(bl=beamLine, center=[0, p, -beamLine.hX], limPhysY=[-1e4, 1e4])
    #    beamLine.xtalP = roes.OE(**kwOE, material=xtalPerfect)
    beamLine.xtalM = roes.OE(**kwOE, material=xtalMosaic)

    beamLine.screen = rscreens.Screen(beamLine, center=[0, 2 * p, 0])

    return beamLine
Пример #9
0
def build_beamline(azimuth=0):
    beamLine = raycing.BeamLine(azimuth=azimuth, height=0)

    beamLine.source = rs.Undulator(beamLine,
                                   'Softi53',
                                   nrays=nrays,
                                   eE=3.0,
                                   eI=0.5,
                                   eEspread=0.0008 * energySpreadFactor,
                                   eEpsilonX=0.263 * emittanceFactor,
                                   eEpsilonZ=0.008 * emittanceFactor,
                                   betaX=9.,
                                   betaZ=2.,
                                   period=48.,
                                   n=77,
                                   targetE=(E0, targetHarmonic),
                                   eMin=E0 - dE * vFactor,
                                   eMax=E0 + dE * vFactor,
                                   xPrimeMax=acceptanceHor / 2 * 1e3 * hShrink,
                                   zPrimeMax=acceptanceVer / 2 * 1e3 * vShrink,
                                   xPrimeMaxAutoReduce=False,
                                   zPrimeMaxAutoReduce=False,
                                   uniformRayDensity=True,
                                   filamentBeam=(what != 'rays'),
                                   targetOpenCL='auto')

    opening = [
        -acceptanceHor * pFE / 2 * hShrink, acceptanceHor * pFE / 2 * hShrink,
        -acceptanceVer * pFE / 2 * vShrink, acceptanceVer * pFE / 2 * vShrink
    ]
    #    opening = [-acceptanceHor*pFE/2*hShrink*hFactor,
    #               acceptanceHor*pFE/2*hShrink*hFactor,
    #               -acceptanceVer*pFE/2*vShrink,
    #               acceptanceVer*pFE/2*vShrink]
    beamLine.slitFE = ra.RectangularAperture(
        beamLine,
        'FE slit',
        kind=['left', 'right', 'bottom', 'top'],
        opening=opening)
    beamLine.fsm0 = rsc.Screen(beamLine, 'FSM-M1')

    xShrink = vShrink if what == 'wave' else 1
    yShrink = hShrink if what == 'wave' else 1
    beamLine.m1 = roe.ToroidMirror(beamLine,
                                   'M1',
                                   surface=('Au', ),
                                   material=material,
                                   limPhysX=(-5 * xShrink, 5 * xShrink),
                                   limPhysY=(-150 * yShrink, 150 * yShrink),
                                   positionRoll=np.pi / 2,
                                   R=1e22,
                                   alarmLevel=0.1)
    #    beamLine.fsm1 = rsc.Screen(beamLine, 'FSM-M1')

    xShrink = hShrink if what == 'wave' else 1
    yShrink = vShrink if what == 'wave' else 1
    beamLine.m2 = roe.OE(beamLine,
                         'M2',
                         surface=('Au', ),
                         material=material,
                         limPhysX=(-5 * xShrink, 5 * xShrink),
                         limPhysY=(-225 * yShrink, 225 * yShrink),
                         alarmLevel=0.1)

    gratingKW = dict(
        positionRoll=np.pi,
        limPhysX=(-2 * xShrink, 2 * xShrink),
        #limPhysX=(-2*xShrink*hFactor, 2*xShrink*hFactor),
        limPhysY=(-40 * yShrink, 40 * yShrink),
        alarmLevel=0.1)
    if what == 'rays':
        beamLine.pg = Grating(beamLine,
                              'PlaneGrating',
                              material=gratingMaterial,
                              **gratingKW)
        beamLine.pg.material.efficiency = [(1, 0.4)]
    else:
        beamLine.pg = roe.BlazedGrating(beamLine,
                                        'BlazedGrating',
                                        material=material,
                                        blaze=blaze,
                                        rho=rho,
                                        **gratingKW)
    beamLine.pg.order = 1
    #    beamLine.fsmPG = rsc.Screen(beamLine, 'FSM-PG')

    beamLine.m3 = roe.ToroidMirror(
        beamLine,
        'M3',
        surface=('Au', ),
        material=material,
        positionRoll=-np.pi / 2,
        limPhysX=(-10. * vShrink, 10. * vShrink),
        limPhysY=(-100. * hShrink, 100. * hShrink),
        #limPhysY=(-100.*hShrink*hFactor, 100.*hShrink*hFactor),
        alarmLevel=0.1)
    beamLine.fsm3 = rsc.Screen(beamLine, 'FSM-M3')

    #    beamLine.exitSlit = ra.RoundAperture(
    #         beamLine, 'ExitSlit', r=ESradius, alarmLevel=None)
    beamLine.exitSlit = ra.RectangularAperture(
        beamLine,
        'ExitSlit',
        #         opening=[-ESdX*hFactor/2, ESdX*hFactor/2,
        #                  -ESdZ*vFactor/2, ESdZ*vFactor/2])
        opening=[-ESdX / 2, ESdX / 2, -ESdZ / 2, ESdZ / 2])

    beamLine.m4 = roe.EllipticalMirrorParam(
        beamLine,
        'M4',
        surface=('Au', ),
        material=material,
        positionRoll=np.pi / 2,
        pitch=pitch,
        isCylindrical=True,
        p=43000.,
        q=dM45 + pExp,
        limPhysX=(-0.5 * vShrink, 0.5 * vShrink),
        limPhysY=(-70. * hShrink, 70. * hShrink),
        #limPhysY=(-70.*hShrink*hFactor, 70.*hShrink*hFactor),
        alarmLevel=0.2)
    beamLine.fsm4 = rsc.Screen(beamLine, 'FSM-M4')

    beamLine.m5 = roe.EllipticalMirrorParam(beamLine,
                                            'M5',
                                            surface=('Au', ),
                                            material=material,
                                            yaw=-2 * pitch,
                                            pitch=pitch,
                                            isCylindrical=True,
                                            p=dM4ES + dM45,
                                            q=pExp,
                                            limPhysX=(-0.5 * hShrink,
                                                      0.5 * hShrink),
                                            limPhysY=(-40. * vShrink,
                                                      40. * vShrink),
                                            alarmLevel=0.2)
    beamLine.fsm5 = rsc.Screen(beamLine, 'FSM-M5')

    beamLine.fsmExp = rsc.Screen(beamLine, 'FSM-Exp')

    beamLine.waveOnSampleA = [np.zeros(abins) for sP in dFocus]
    beamLine.waveOnSampleB = [np.zeros(abins) for sP in dFocus]
    beamLine.waveOnSampleC = [np.zeros(abins) for sP in dFocus]

    return beamLine
Пример #10
0
def build_beamline(azimuth=0):
    beamLine = raycing.BeamLine(azimuth=azimuth, height=0)

    beamLine.source = rs.Undulator(
        beamLine, 'Softi53', nrays=nrays,
        eE=3.0, eI=0.5,  eEspread=0.0008*energySpreadFactor,
        eEpsilonX=0.263*emittanceFactor, eEpsilonZ=0.008*emittanceFactor,
        betaX=9., betaZ=2.,
        period=48., n=81, targetE=(E0, targetHarmonic),
        eMin=E0-dE*vFactor, eMax=E0+dE*vFactor,
        xPrimeMax=acceptanceHor/2*1e3*hShrink,
        zPrimeMax=acceptanceVer/2*1e3*vShrink,
        xPrimeMaxAutoReduce=False, zPrimeMaxAutoReduce=False,
        targetOpenCL='CPU',
        uniformRayDensity=True,
        filamentBeam=(what != 'rays'))

    opening = [-acceptanceHor*pFE/2*hShrink, acceptanceHor*pFE/2*hShrink,
               -acceptanceVer*pFE/2*vShrink, acceptanceVer*pFE/2*vShrink]
    beamLine.slitFE = ra.RectangularAperture(
        beamLine, 'FE slit', kind=['left', 'right', 'bottom', 'top'],
        opening=opening)
    beamLine.fsm0 = rsc.Screen(beamLine, 'FSM-M1')

    xShrink = vShrink if what == 'wave' else 1
    yShrink = hShrink if what == 'wave' else 1
    beamLine.m1 = roe.ToroidMirror(
        beamLine, 'M1', surface=('Au',), material=(material,),
        limPhysX=(-5*xShrink, 5*xShrink), limPhysY=(-150*yShrink, 150*yShrink),
        positionRoll=np.pi/2, R=1e22,
        alarmLevel=0.1)
#    beamLine.fsm1 = rsc.Screen(beamLine, 'FSM-M1')

    xShrink = hShrink if what == 'wave' else 1
    yShrink = vShrink if what == 'wave' else 1
    beamLine.m2 = roe.OE(
        beamLine, 'M2', surface=('Au',), material=(material,),
        limPhysX=(-5*xShrink, 5*xShrink), limPhysY=(-225*yShrink, 225*yShrink),
        alarmLevel=0.1)

    gratingKW = dict(
        positionRoll=np.pi, limPhysX=(-2*xShrink, 2*xShrink),
        limPhysY=(-40*yShrink, 40*yShrink), alarmLevel=0.1)
    if what == 'rays':
        beamLine.pg = Grating(beamLine, 'PlaneGrating',
                              material=gratingMaterial, **gratingKW)
        beamLine.pg.material.efficiency = [(1, 0.4)]
    else:
        beamLine.pg = roe.BlazedGrating(
            beamLine, 'BlazedGrating', material=material, blaze=blaze,
            rho=rho, **gratingKW)
    beamLine.pg.order = 1
#    beamLine.fsmPG = rsc.Screen(beamLine, 'FSM-PG')

    beamLine.m3 = roe.ToroidMirror(
        beamLine, 'M3', surface=('Au',), material=(material,),
        positionRoll=-np.pi/2, limPhysX=(-2*vShrink, 2*vShrink),
        limPhysY=(-80*hShrink*hExtraFactor, 80*hShrink*hExtraFactor),
        #limPhysY=(-80*hShrink, 80*hShrink),
        alarmLevel=0.1)
    beamLine.fsm3 = rsc.Screen(beamLine, 'FSM-M3')

#    beamLine.exitSlit = ra.RoundAperture(
#         beamLine, 'ExitSlit', r=ESradius, alarmLevel=None)
    beamLine.exitSlit = ra.RectangularAperture(
         beamLine, 'ExitSlit',
         opening=[-ESdX/2*hFactor*hShrink, ESdX/2*hFactor*hShrink,
                  -ESdZ/2*vFactor*vShrink, ESdZ/2*vFactor*vShrink])

    beamLine.fzp = roe.NormalFZP(
        beamLine, 'FZP', pitch=np.pi/2, material=mAuFZP, f=focus, E=E0,
        N=Nzone)
    beamLine.fzp.order = 1
    beamLine.fzp.material.efficiency = [(1, 0.1)]  # used with rays
    print('outerzone = {0} mm'.format(beamLine.fzp.rn[-1]-beamLine.fzp.rn[-2]))
    beamLine.fzp.area = np.pi * beamLine.fzp.rn[-1]**2 / 2
    beamLine.fsmFZP = rsc.Screen(beamLine, 'FSM-FZP')

    beamLine.fsmExp = rsc.Screen(beamLine, 'FSM-Exp')
    return beamLine
Пример #11
0
def build_beamline(azimuth=0):
    beamLine = raycing.BeamLine(azimuth=azimuth, height=0)

    beamLine.source = rs.Undulator(beamLine,
                                   'Softi53',
                                   nrays=nrays,
                                   eE=3.0,
                                   eI=0.5,
                                   eEspread=0.0008 * energySpreadFactor,
                                   eEpsilonX=0.263 * emittanceFactor,
                                   eEpsilonZ=0.008 * emittanceFactor,
                                   betaX=9.,
                                   betaZ=2.,
                                   period=48.,
                                   n=77,
                                   targetE=(E0, targetHarmonic),
                                   eMin=E0 - dE * vFactor,
                                   eMax=E0 + dE * vFactor,
                                   xPrimeMax=acceptanceHor / 2 * 1e3,
                                   zPrimeMax=acceptanceVer / 2 * 1e3,
                                   xPrimeMaxAutoReduce=False,
                                   zPrimeMaxAutoReduce=False,
                                   uniformRayDensity=True,
                                   filamentBeam=True)

    opening = [
        -acceptanceHor * pFE / 2, acceptanceHor * pFE / 2,
        -acceptanceVer * pFE / 2, acceptanceVer * pFE / 2
    ]
    beamLine.slitFE = ra.RectangularAperture(
        beamLine,
        'FE slit',
        kind=['left', 'right', 'bottom', 'top'],
        opening=opening)
    beamLine.fsm0 = rsc.Screen(beamLine, 'FSM-M1')

    beamLine.m1 = roe.ToroidMirror(beamLine,
                                   'M1',
                                   surface=('Au', ),
                                   material=(mAu, ),
                                   limPhysX=(-5, 5),
                                   limPhysY=(-150, 150),
                                   positionRoll=np.pi / 2,
                                   R=1e22,
                                   alarmLevel=0.1)
    #    beamLine.fsm1 = rsc.Screen(beamLine, 'FSM-M1')

    beamLine.m2 = roe.OE(beamLine,
                         'M2',
                         surface=('Au', ),
                         material=(mAu, ),
                         limPhysX=(-5, 5),
                         limPhysY=(-225, 225),
                         alarmLevel=0.1)

    gratingKW = dict(positionRoll=np.pi,
                     limPhysX=(-2, 2),
                     limPhysY=(-40, 40),
                     alarmLevel=0.1)
    beamLine.pg = roe.BlazedGrating(beamLine,
                                    'BlazedGrating',
                                    material=mGolden,
                                    blaze=blaze,
                                    rho=rho,
                                    **gratingKW)
    beamLine.pg.order = 1
    #    beamLine.fsmPG = rsc.Screen(beamLine, 'FSM-PG')

    beamLine.m3 = roe.ToroidMirror(beamLine,
                                   'M3',
                                   surface=('Au', ),
                                   material=(mAu, ),
                                   positionRoll=-np.pi / 2,
                                   limPhysX=(-10., 10.),
                                   limPhysY=(-100., 100.),
                                   alarmLevel=0.1)
    beamLine.fsm3 = rsc.Screen(beamLine, 'FSM-M3')

    #    beamLine.exitSlit = ra.RoundAperture(
    #         beamLine, 'ExitSlit', r=ESradius, alarmLevel=None)
    beamLine.exitSlit = ra.RectangularAperture(beamLine,
                                               'ExitSlit',
                                               opening=[
                                                   -ESdX * hFactor / 2,
                                                   ESdX * hFactor / 2,
                                                   -ESdZ * vFactor / 2,
                                                   ESdZ * vFactor / 2
                                               ])

    beamLine.m4 = roe.EllipticalMirrorParam(beamLine,
                                            'M4',
                                            surface=('Au', ),
                                            material=(mAu, ),
                                            positionRoll=np.pi / 2,
                                            pitch=pitch,
                                            isCylindrical=True,
                                            p=43000.,
                                            q=dM45 + pExp,
                                            limPhysX=(-0.5, 0.5),
                                            limPhysY=(-70., 70.),
                                            alarmLevel=0.2)

    beamLine.m5 = roe.EllipticalMirrorParam(beamLine,
                                            'M5',
                                            surface=('Au', ),
                                            material=(mAu, ),
                                            yaw=-2 * pitch,
                                            pitch=pitch,
                                            isCylindrical=True,
                                            p=dM4ES + dM45,
                                            q=pExp,
                                            limPhysX=(-0.5, 0.5),
                                            limPhysY=(-40., 40.),
                                            alarmLevel=0.2)

    beamLine.fsmExp = rsc.Screen(beamLine, 'FSM-Exp')

    return beamLine
Пример #12
0
def build_beamline():
    beamLine = raycing.BeamLine()
    #    rs.GeometricSource(
    #        beamLine, 'source', nrays=nrays, polarization='horizontal', **kw)
    rs.Undulator(beamLine, nrays=nrays, **kwargs)

    if case == 'mirror':
        beamLine.diffoe = roe.OE(beamLine,
                                 'PlaneMirror', (0, p, 0),
                                 pitch=pitch,
                                 material=coating)
        phiOffset = 2 * pitch
        zFlatScreen = q * np.sin(2 * pitch)
        zHemScreen = 0
    elif case == 'mirrorEll':
        beamLine.diffoe = roe.EllipticalMirrorParam(beamLine,
                                                    'EllipticalMirror',
                                                    (0, p, 0),
                                                    p=p,
                                                    q=q,
                                                    pitch=pitch,
                                                    material=coating)

        phiOffset = 2 * pitch
        zFlatScreen = q * np.sin(2 * pitch)
        zHemScreen = 0
    elif case == '2mirrors':
        beamLine.oe0 = roe.OE(beamLine,
                              'PlaneMirror0', (0, p - dp, 0),
                              pitch=pitch,
                              material=coating)
        zFlatScreen = dp * np.tan(2 * pitch)
        beamLine.diffoe = roe.OE(beamLine,
                                 'PlaneMirror', (0, p, zFlatScreen),
                                 pitch=-pitch,
                                 positionRoll=np.pi,
                                 material=coating)
        phiOffset = 0
        zHemScreen = zFlatScreen
    elif case == '2mirrorsEll':
        beamLine.oe0 = roe.OE(beamLine,
                              'PlaneMirror0', (0, p - dp, 0),
                              pitch=pitch,
                              material=coating)
        zFlatScreen = dp * np.tan(2 * pitch)
        beamLine.diffoe = roe.EllipticalMirrorParam(beamLine,
                                                    'EllipticalMirror',
                                                    (0, p, zFlatScreen),
                                                    p=p,
                                                    q=q,
                                                    pitch=-pitch,
                                                    positionRoll=np.pi,
                                                    material=coating)
        phiOffset = 0
        zHemScreen = zFlatScreen
    elif case == 'aperture':
        beamLine.diffoe = ra.RectangularAperture(
            beamLine, 'ra', (0, p, 0), ('left', 'right', 'bottom', 'top'))
        phiOffset = 0
        zFlatScreen = 0
        zHemScreen = 0

    if case.startswith('mir'):
        zvec = [0, -np.sin(2 * pitch), np.cos(2 * pitch)]