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
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
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
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
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
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
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
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
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
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
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
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)]