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
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 __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
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