def build_beamline(nrays=1e5): beamLine = raycing.BeamLine(height=0) sourceCenter = [0, 0, 0] mirrorCenter = [0, p, p*np.tan(inclination)] kw = dict( nrays=nrays, distE='flat', energies=(E0-dE, E0+dE), polarization='horizontal', pitch=inclination) if case == 'elliptical': # point source kw.update(dict( dx=0, dz=0, distxprime='flat', dxprime=1e-4, distzprime='flat', dzprime=1e-4)) Mirror = roe.EllipticalMirrorParam kwMirror = dict(f1=sourceCenter, q=q) elif case == 'parabolical': # collimated source kw.update(dict( dx=1, dz=1, distx='flat', distz='flat', distxprime=None, distzprime=None)) Mirror = roe.ParabolicalMirrorParam dp = q * np.sin(2*pitch) di = q * np.sin(inclination) kwMirror = dict(f2=[mirrorCenter[0] + dp*np.sin(globalRoll), mirrorCenter[1] + q, mirrorCenter[2] + dp*np.cos(globalRoll) + di]) rs.GeometricSource( beamLine, 'GeometricSource', sourceCenter, **kw) beamLine.fsm1 = rsc.Screen(beamLine, 'beforeMirror', mirrorCenter) beamLine.ellMirror = Mirror( beamLine, 'EllM', mirrorCenter, rotationSequence='RyRzRx', pitch=pitch+inclination*np.cos(globalRoll), positionRoll=globalRoll, yaw=inclination*np.sin(globalRoll), **kwMirror) beamLine.fsm2 = rsc.Screen(beamLine, '@focus', [0, 0, 0]) beamLine.fsm2dY = np.linspace(-2, 2, 5) * q*0.1 return beamLine
def build_beamline(nrays=nrays): beamLine = raycing.BeamLine() rs.GeometricSource(beamLine, 'source', nrays=nrays, polarization=polarization, **kw) # beamLine.bg = BlazedGratingAlt( beamLine.bg = roe.BlazedGrating(beamLine, 'BlazedGrating', (0, p, 0), pitch=pitch, material=coating, blaze=blaze, rho=rho) drho = beamLine.bg.get_grating_area_fraction() beamLine.bg.area = dx * dz / np.sin(pitch) * drho beamLine.gr = Grating(beamLine, 'Grating', (0, p, 0), pitch=pitch, material=coatingGr, order=range(minOrder, maxOrder + 1)) beamLine.fsm = rsc.HemisphericScreen(beamLine, 'FSM', (0, p, 0), R=q, x=(0, -np.sin(thetaOffset), np.cos(thetaOffset)), z=(0, np.cos(thetaOffset), np.sin(thetaOffset))) 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 build_beamline(nrays=1e4): beamLine = raycing.BeamLine(height=0) # rs.CollimatedMeshSource(beamLine, 'CollimatedMeshSource', dx=2, dz=2, # nx=21, nz=21, energies=(E0,), withCentralRay=False, autoAppendToBL=True) rs.GeometricSource(beamLine, 'CollimatedSource', nrays=nrays, dx=0.5, dz=0.5, distxprime=None, distzprime=None, energies=(E0, )) beamLine.fsm1 = rsc.Screen(beamLine, 'FSM1', (0, p - 100, 0)) beamLine.lens = Lens(beamLine, 'CRL', [0, p, 0], pitch=np.pi / 2, t=0, material=mBeryllium, focus=parabolaParam, zmax=zmax, nCRL=(q, E0), alarmLevel=0.1) beamLine.fsm2 = rsc.Screen(beamLine, 'FSM2') beamLine.fsm2.dqs = np.linspace(-140, 140, 71) # beamLine.fsm2.dqs = np.linspace(-70, 70, 15) return beamLine
def build_beamline(nrays=1e5): beamLine = raycing.BeamLine(azimuth=0, height=0) rs.GeometricSource(beamLine, 'GeometricSource', nrays=nrays, dx=beamH, dy=0, dz=beamV, distxprime='flat', distzprime='flat', polarization=None) beamLine.analyzer = Toroid(beamLine, analyzerName, surface=('', ), limPhysX=(-dxCrystal / 2, dxCrystal / 2), limPhysY=(-dyCrystal / 2, dyCrystal / 2), Rm=Rm, Rs=Rs, shape='rect', **facetKWargs) beamLine.detector = rsc.Screen(beamLine, 'Detector', z=(0, 0, 1)) # beamLine.s1h = ra.RectangularAperture( # beamLine, 'horizontal. slit', 0, Rs-10., # ('left', 'right'), [-0.1, 0.1]) return beamLine
def build_beamline(nrays=1e5): beamLine = raycing.BeamLine(height=0) # source=rs.GeometricSource( # beamLine, 'GeometricSource', (0, 0, 0), # nrays=nrays, distx='flat', dx=0.12, distz='flat', dz=0.12, # dxprime=0, dzprime=0, # distE='flat', energies=(E0-dE, E0+dE), polarization='horizontal') rs.GeometricSource( beamLine, 'GeometricSource', (0, 0, 0), nrays=nrays, distx='annulus', dx=(0, 0.056), dxprime=0, dzprime=0, distE='flat', energies=(E0-dE, E0+dE), polarization='horizontal') beamLine.fsm1 = rsc.Screen(beamLine, 'DiamondFSM1', (0, 10., 0)) # beamLine.fzp = roe.NormalFZP(beamLine, 'FZP', [0, 10., 0], pitch=np.pi/2, # material=mGold, f=2., E=E0, N=50) beamLine.fzp = roe.GeneralFZPin0YZ( beamLine, 'FZP', [0, 10., 0], pitch=np.pi/2, material=mGold, f1='inf', f2=(0, 0, 2.), E=E0, N=500, phaseShift=np.pi) # source.dx = 2 * beamLine.fzp.rn[-1] # source.dz = source.dx beamLine.fzp.order = 1 beamLine.fsm2 = rsc.Screen(beamLine, 'DiamondFSM2', (0, 12., 0)) return beamLine
def build_beamline(): beamLine = raycing.BeamLine() beamLine.geometricSource01 = rsources.GeometricSource( bl=beamLine, name=None, center=[0, 0, 0], nrays=1000, distE=r"flat", dx=0.001, dz=0.001, dxprime=0, dzprime=0, energies=[Emin, Emax]) beamLine.screen02 = rscreens.Screen(bl=beamLine, center=[0, 10000, 0]) beamLine.lauePlate01 = roes.BentLaueCylinder( # beamLine.lauePlate01 = roes.LauePlate( bl=beamLine, name=None, center=[0, 10000, 0], pitch=0.0, R=1e4, crossSection='parabolic', material=crystalSi01, targetOpenCL='CPU') beamLine.screen01 = rscreens.Screen(bl=beamLine, name=None, center=[0.0, 20000, 0.0]) return beamLine
def build_beamline(nrays=1e5): beamLine = raycing.BeamLine(height=0) # rs.GeometricSource(beamLine, 'GeometricSource', (0, 0, 0), # nrays=nrays, dx=0, dz=0, distxprime='flat', dxprime=1e-4, # distzprime='flat', dzprime=1e-4, # distE='flat', energies=(E0-dE, E0+dE), polarization='horizontal') rs.GeometricSource( beamLine, 'GeometricSource', (0, 0, 0), nrays=nrays, distx='annulus', dx=(0, 1), dxprime=0, dzprime=0, distE='flat', energies=(E0-dE, E0+dE), polarization='horizontal') beamLine.fsm1 = rsc.Screen(beamLine, 'DiamondFSM1', (0., p-100, 0.)) siCryst = rm.CrystalSi(hkl=(1, 1, 1), geom='Bragg-Fresnel') pitch = \ siCryst.get_Bragg_angle(E0) - siCryst.get_dtheta_symmetric_Bragg(E0) # pitch = np.pi/2 f = 0, p * np.cos(pitch), p * np.sin(pitch) beamLine.fzp = roe.GeneralFZPin0YZ( beamLine, 'FZP', [0., p, 0.], pitch=pitch, material=siCryst, f1='inf', f2=f, E=E0, N=340) beamLine.fzp.order = 1 beamLine.fsm2 = rsc.Screen(beamLine, 'DiamondFSM2', [0, 0, 0], z=(0, -np.sin(2*pitch), np.cos(2*pitch))) if showIn3D: beamLine.fsm2RelPos = [p] else: beamLine.fsm2RelPos = np.linspace(0, p, 21) 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)) 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=1e4): beamLine = raycing.BeamLine(height=0) rs.GeometricSource( beamLine, 'CollimatedSource', nrays=nrays, dx=0.5, dz=0.5, distxprime=None, distzprime=None, energies=(E0,)) beamLine.lenses = [] ilens = 0 while True: roll = 0. if Lens == roe.ParabolicCylinderFlatLens: roll = -np.pi/4 if ilens % 2 == 0 else np.pi/4 lens = Lens( beamLine, 'Lens{0:02d}'.format(ilens), center=[0, p + dz*ilens, 0], pitch=np.pi/2, roll=roll, t=0.1, material=material, limPhysX=[-2, 2], limPhysY=[-2, 2], shape='round', focus=parabolaParam, zmax=zmax, alarmLevel=0.1) beamLine.lenses.append(lens) if ilens == 0: nCRL = lens.get_nCRL(q, E0) ilens += 1 if nCRL - ilens < 0.5: break beamLine.fsmF = rsc.Screen(beamLine, 'FSM-focus', [0, p+q, 0]) return beamLine
def build_beamline(): beamLine = raycing.BeamLine(height=0) rs.GeometricSource(beamLine, 'GeometricSource', dx=3., dz=3., dxprime=1.6e-4, distzprime=None) beamLine.fsm1 = rsc.Screen(beamLine, 'FSM1', (0, pLaueSCM - 100, 0)) beamLine.laueSCM = roe.BentLaueCylinder( beamLine, 'LaueSCM', (0, pLaueSCM, 0), material=(siCrystal,)) beamLine.fsm2 = rsc.Screen(beamLine, 'FSM2', [0, pLaueSCM + qLaueSCM, 0]) return beamLine
def build_beamline(nrays=raycing.nrays): beamLine = raycing.BeamLine(azimuth=0, height=0) rs.GeometricSource( beamLine, 'GeometricSource', nrays=nrays, dx=beamH, dy=0, dz=0.05, distxprime='flat', distzprime='flat', polarization=None) beamLine.analyzer = Cylinder( beamLine, analyzerName, surface=('',), R=Rm, limPhysX=(-dxCrystal/2, dxCrystal/2), limPhysY=(-dyCrystal/2, dyCrystal/2)) beamLine.detector = rsc.Screen(beamLine, 'Detector') return beamLine
def build_beamline(nrays=1000): beamLine = raycing.BeamLine(height=0) rs.GeometricSource(beamLine, 'GeometricSource', (0, 0, 0), nrays=nrays, dx=0., dz=0., distxprime='annulus', distE='lines', energies=(E0, ), polarization='horizontal') beamLine.fsm1 = rsc.Screen(beamLine, 'DiamondFSM1', (0, rSample, 0)) beamLine.capillaries = [] beamLine.firstInLayer = [] beamLine.xzMax = 0 for n in range(layers): if n > 0: ms = range(n) i6 = range(6) else: ms = 0, i6 = 0, beamLine.firstInLayer.append(len(beamLine.capillaries)) for i in i6: for m in ms: x = 2 * (r0 + wall) * (n**2 + m**2 - n * m)**0.5 alpha = np.arcsin(x / rSample) roll1 = -np.arctan2(np.sqrt(3) * m, 2 * n - m) roll = roll1 + i * np.pi / 3. capillary = BentCapillary( beamLine, 'BentCapillary', [0, 0, 0], roll=roll, material=mGlass, limPhysY=[rSample * np.cos(alpha), f], f=f, rSample=rSample, entranceAlpha=alpha, rIn=r0, rOut=r0) beamLine.capillaries.append(capillary) if beamLine.xzMax < capillary.b0: beamLine.xzMax = capillary.b0 print('max divergence =', alpha) beamLine.xzMax += 2 * r0 print(len(beamLine.capillaries)) beamLine.sources[0].dxprime = 0, np.arcsin( (2 * n + 1) * (r0 + wall) / rSample) # beamLine.sources[0].dxprime = (np.arcsin((2*n-3) * (r0+wall) / rSample), # np.arcsin((2*n+1) * (r0+wall) / rSample)) # beamLine.sources[0].dxprime = 0, np.arcsin(r0 / rSample) beamLine.fsm2 = rsc.Screen(beamLine, 'DiamondFSM2', (0, f, 0)) return beamLine
def build_beamline(): P02_2 = raycing.BeamLine() P02_2.Undulator01 = rsources.GeometricSource( bl=P02_2, nrays=5e4, name='source', polarization='horizontal', dx=0.5, dz=0.5, dxprime=0.005e-3, dzprime=0.005e-3, distx='normal', distz='normal', energies=(60000, 60) if powder else (1000, 100000), distE='normal' if powder else 'flat') P02_2.FSM_Source = rscreens.Screen(bl=P02_2, name=r"FSM_Source", center=[0, 29001, 0]) P02_2.Sample = roes.LauePlate( bl=P02_2, name=r"CeO2 Powder Sample" if powder else "Silicon 001 wafer", center=[0, 65000, 0], pitch='90deg', yaw=0 if powder else '45deg', rotationSequence='RxRyRz', material=PowderSample if powder else MonoCrystalSample, targetOpenCL=(0, 0), precisionOpenCL='float32') P02_2.FSM_Sample = rscreens.Screen(bl=P02_2, name=r"After Sample", center=[0, 65100, 0]) P02_2.RoundBeamStop01 = rapts.RoundBeamStop(bl=P02_2, name=r"BeamStop", center=[0, 65149, 0], r=5) P02_2.Frame = rapts.RectangularAperture( bl=P02_2, name=r"Frame", center=[0, 65149.5, 0], opening=[-dSize, dSize, -dSize, dSize]) P02_2.FSM_Detector = rscreens.Screen(bl=P02_2, name=r"Detector", center=[0, 65150, 0]) return P02_2
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=2e-4, dzprime=1e-4, distE='lines', energies=(E0, ), polarization='horizontal') if case == 'parabolic': mirrorVFM = roe.BentFlatMirror mirrorHFM = roe.BentFlatMirror RVFM = 2 * p / np.sin(pitchVFM) kwargsVFM = {'R': RVFM} RHFM = 2 * p / np.sin(pitchHFM) kwargsHFM = {'R': RHFM} elif case == 'elliptical': mirrorVFM = roe.EllipticalMirrorParam mirrorHFM = roe.EllipticalMirrorParam kwargsVFM = {'p': pVFM, 'q': qVFM, 'isCylindrical': True} kwargsHFM = {'p': pHFM, 'q': qHFM, 'isCylindrical': True} else: raise beamLine.VFM = mirrorVFM(beamLine, 'VFM', [0, p, 0], material=mGold, limPhysX=[gap / 2, W], limPhysY=[-L / 2, L / 2], rotationSequence='RxRyRz', pitch=pitchVFM, yaw=-pitchHFM, **kwargsVFM) beamLine.HFM = mirrorHFM(beamLine, 'HFM', [0, p, 0], material=mGold, limPhysX=[-W, -gap / 2], limPhysY=[-L / 2, L / 2], rotationSequence='RyRzRx', positionRoll=np.pi / 2, pitch=pitchHFM, yaw=pitchVFM, **kwargsHFM) beamLine.fsmMontel = rsc.Screen(beamLine, 'FSM-Montel', (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=2e-4, dzprime=1e-4, distE='lines', energies=(75, 100, 125), polarization='horizontal') # beamLine.feFixedMask = ra.RectangularAperture(beamLine, # 'FEFixedMask', 0, 10000, # ('left', 'right', 'bottom', 'top'), [-3., 3., -1., 1.]) beamLine.fsm1 = rsc.Screen(beamLine, 'DiamondFSM1', (0., 10001., 0.)) beamLine.grating = Grating(beamLine, 'PlaneGrating', [0., 15000., 0.], pitch=np.radians(10), material=mGold) beamLine.grating.order = np.arange(-2, 3) beamLine.fsm2 = rsc.Screen(beamLine, 'DiamondFSM2', (0., fsm2pos, 0.)) return beamLine
def make_source(self): """ Creates source with current settings """ beamLine = raycing.BeamLine() self.source = rs.GeometricSource(beamLine, 'source', self.position, nrays=self.nrays, distx=self.distx, dx=self.dx, distxprime=self.distxprime, dxprime=self.dxprime, distz=self.distz, dz=self.dz, distzprime=self.distzprime, dzprime=self.dzprime, distE=self.distE, energies=self.energies, polarization=None)
def build_beamline(nrays=1e5): beamLine = raycing.BeamLine(height=0) rs.GeometricSource(beamLine, 'GeometricSource', nrays=nrays, dx=3., dz=3., dxprime=1.6e-4, distzprime=None) beamLine.fsm1 = rsc.Screen(beamLine, 'FSM1', (0, pLaueDCM - 100, 0)) beamLine.laueDCM1 = roe.BentLaueCylinder(beamLine, 'LaueDCM1', (0, pLaueDCM, 0), material=(si111, )) beamLine.laueDCM2 = roe.BentLaueCylinder(beamLine, 'LaueDCM2', [0, 0, fixedExit], material=(si111, )) beamLine.fsm2 = rsc.Screen(beamLine, 'FSM2', [0, pLaueDCM + qLaueDCM, fixedExit]) 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(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): 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(): 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(): # for test=True beamLine = raycing.BeamLine() gsource = rs.GeometricSource(beamLine, 'GeometricSource', (0, 0, 0), nrays=nrays, distx='annulus', distxprime=None, distzprime=None, distE='lines', energies=[E_FZP], polarization='h') beamLine.fzp = roe.NormalFZP(beamLine, 'FZP', [0, p, 0], pitch=np.pi / 2, material=mGold, f=f, E=E_FZP, thinnestZone=thinnestZone, isCentralZoneBlack=True) gsource.dx = (0, beamLine.fzp.rn[-1]) beamLine.fzp.area = np.pi * beamLine.fzp.rn[-1]**2 / 2 print('FZP radius=', beamLine.fzp.rn[-1]) r0max = beamLine.fzp.rn[-1] * 5 rNmax = thinnestZone * 5 beamLine.yglo = np.repeat( [10000 if i == 0 else f / i for i in range(maxOrder + 1)], Nr) beamLine.dr = np.array([ r0max / (Nr - 1) if i == 0 else rNmax / (Nr - 1) for i in range(maxOrder + 1) ]) beamLine.zglo = (np.arange(Nr) * beamLine.dr[:, np.newaxis]).flatten() beamLine.xglo = np.zeros_like(beamLine.yglo) return beamLine