def run_process(beamLine): waveOnScreenF = beamLine.fsmF.prepare_wave(beamLine.diffoe, beamLine.xMeshF, beamLine.zMeshF) waveOnScreenH = beamLine.fsmH.prepare_wave(beamLine.diffoe, beamLine.xMeshH, beamLine.zMeshH) wrepeats = 2 for repeat in range(wrepeats): beamSource = beamLine.sources[0].shine(withAmplitudes=True, fixedEnergy=E0) beamToOE = beamSource if case.startswith('2mirrors'): oe0Global, oe0Local = beamLine.oe0.reflect(beamSource) beamToOE = oe0Global if isinstance(beamLine.diffoe, roe.OE): oeGlobal, oeLocal = beamLine.diffoe.reflect(beamToOE) elif isinstance(beamLine.diffoe, ra.RectangularAperture): oeLocal = beamLine.diffoe.propagate(beamToOE) oeGlobal = beamToOE else: raise ValueError('unknown diffracting element') beamFSMraysF = beamLine.fsmF.expose(oeGlobal) beamFSMraysH = beamLine.fsmH.expose(oeGlobal) rw.diffract(oeLocal, waveOnScreenF) rw.diffract(oeLocal, waveOnScreenH) if wrepeats > 1: print('wave repeats: {0} of {1} done'.format(repeat + 1, wrepeats))
def run_process(beamLine): outDict = {} for ip, (p, (x, z)) in enumerate(zip(ps, beamLine.fsmXZmeshes)): beamLine.fsmFar.center[1] = p waveOnFSMg = beamLine.fsmFar.prepare_wave(beamLine.source, x, z) beamLine.source.shine(wave=waveOnFSMg) # mult = np.exp(0.5j * waveOnFSMg.x / x.max()) # waveOnFSMg.Es *= mult # waveOnFSMg.Ep *= mult # mult = np.exp(0.5j * waveOnFSMg.z / z.max()) # waveOnFSMg.Es *= mult # waveOnFSMg.Ep *= mult if outDict == {}: beamSource = waveOnFSMg what = 'beamFSMg{0}'.format(ip) outDict[what] = waveOnFSMg if p > 100 and wantKirchhoff: wrepeats = 1 waveOnFSMk = beamLine.fsmFar.prepare_wave(beamLine.source, x, z) for r in range(wrepeats): rw.diffract(beamSource, waveOnFSMk) if wrepeats > 1: print('wave repeats: {0} of {1} done'.format( r+1, wrepeats)) what = 'beamFSMk{0}'.format(ip) outDict[what] = waveOnFSMk return outDict
def run_process(beamLine): thetaNodes = (beamLine.orderThetas[:, np.newaxis] + screenThetas).flatten() waveFSM = beamLine.fsm.prepare_wave(beamLine.bg, screenPhis, thetaNodes) wrepeats = 1 beamLine.fluxIn = 0 for repeat in range(wrepeats): beamSource = beamLine.sources[0].shine(withAmplitudes=True) beamLine.fluxIn += (beamSource.Jss + beamSource.Jpp).sum() beamGglobal, beamGlocal = beamLine.gr.reflect(beamSource) beamFSMrays = beamLine.fsm.expose(beamGglobal) oeGlobal, oeLocal = beamLine.bg.reflect(beamSource) oeLocal.area = beamLine.bg.area rw.diffract(oeLocal, waveFSM) if wrepeats > 1: print('wave repeats: {0} of {1} done'.format(repeat+1, wrepeats)) beamLine.fluxIn /= wrepeats beamLine.fluxOut = (oeLocal.Jss + oeLocal.Jpp)[oeLocal.state == 1].sum() outDict = {'beamSource': beamSource, 'beamGglobal': beamGglobal, 'beamGlocal': beamGlocal, 'beamFSMrays': beamFSMrays, 'waveFSM': waveFSM} beamLine.waveFSM = waveFSM oeLocal.y = oeLocal.y % (4*beamLine.bg.rho_1) - 2*beamLine.bg.rho_1 outDict['oeLocal'] = oeLocal saw = rs.Beam(copyFrom=oeLocal) saw.y = np.random.uniform(-1.1, 1.1, size=len(saw.x)) * beamLine.bg.rho_1 saw.z = beamLine.bg.local_z(0, saw.y) outDict['saw'] = saw return outDict
def run_process(beamLine): waveOnScreen = beamLine.fsm1.prepare_wave(beamLine.slit, xmesh, zmesh) beamSource = None repeats = 10 for repeat in range(repeats): waveOnSlit = beamLine.slit.prepare_wave(beamLine.source, mynrays) beamSource = beamLine.source.shine(accuBeam=beamSource, fixedEnergy=E0, wave=waveOnSlit) beamFSM0 = beamLine.fsm0.expose(beamSource) beamLine.slit.propagate(beamSource) beamFSM1 = beamLine.fsm1.expose(beamSource) rw.diffract(waveOnSlit, waveOnScreen) if waveOnScreen.diffract_repeats == 0: break if repeats > 1: print('wave repeats: {0} of {1} done'.format(repeat+1, repeats)) outDict = {'beamSource': beamSource, 'beamFSM0': beamFSM0, 'beamFSM1': beamFSM1, 'waveOnScreen': waveOnScreen } return outDict
def run_process(beamLine): waveOnScreen = beamLine.fsm1.prepare_wave(beamLine.slit, xmesh, zmesh) beamSource = None repeats = 10 for repeat in range(repeats): waveOnSlit = beamLine.slit.prepare_wave(beamLine.source, mynrays) beamSource = beamLine.source.shine(accuBeam=beamSource, fixedEnergy=E0, wave=waveOnSlit) beamFSM0 = beamLine.fsm0.expose(beamSource) beamLine.slit.propagate(beamSource) beamFSM1 = beamLine.fsm1.expose(beamSource) rw.diffract(waveOnSlit, waveOnScreen) if waveOnScreen.diffract_repeats == 0: break if repeats > 1: print('wave repeats: {0} of {1} done'.format(repeat + 1, repeats)) outDict = { 'beamSource': beamSource, 'beamFSM0': beamFSM0, 'beamFSM1': beamFSM1, 'waveOnScreen': waveOnScreen } return outDict
def run_process(beamLine): outDict = {} beamLine.fsmFar.center[1] = 0 x, z = beamLine.fsmXZmeshes[0] waveOnFSMg = beamLine.fsmFar.prepare_wave(beamLine.source, x, z) beamLine.source.shine(wave=waveOnFSMg) beamLine.slit.propagate(waveOnFSMg) state = np.array(waveOnFSMg.state) for ip, (p, (x, z)) in enumerate(zip(ps, beamLine.fsmXZmeshes)): beamLine.fsmFar.center[1] = p waveOnFSMg = beamLine.fsmFar.prepare_wave(beamLine.source, x, z) beamLine.source.shine(wave=waveOnFSMg) waveOnFSMg.state[:] = state if outDict == {}: # or if ip == 0: beamSource = waveOnFSMg beamSource.area = 0.5 * np.pi * w0**2 what = 'beamFSMg{0}'.format(ip) outDict[what] = waveOnFSMg if p > 100 and wantKirchhoff: print('p = {0}m, {1} of {2}'.format(p * 1e-3, ip + 1, len(ps))) wrepeats = 1 waveOnFSMk = beamLine.fsmFar.prepare_wave(beamLine.source, x, z) for r in range(wrepeats): rw.diffract(beamSource, waveOnFSMk, targetOpenCL=targetOpenCL) if wrepeats > 1: print('wave repeats: {0} of {1} done'.format( r + 1, wrepeats)) what = 'beamFSMk{0}'.format(ip) outDict[what] = waveOnFSMk return outDict
def run_process(beamLine): outDict = {} for ip, (p, (x, z)) in enumerate(zip(ps, beamLine.fsmXZmeshes)): print('screen position {0} of {1}'.format(ip+1, len(ps))) beamLine.fsmFar.center[1] = p waveOnFSMg = beamLine.fsmFar.prepare_wave(beamLine.source, x, z) beamLine.source.shine(wave=waveOnFSMg) # mult = np.exp(0.5j * waveOnFSMg.x / x.max()) # waveOnFSMg.Es *= mult # waveOnFSMg.Ep *= mult # mult = np.exp(0.5j * waveOnFSMg.z / z.max()) # waveOnFSMg.Es *= mult # waveOnFSMg.Ep *= mult if outDict == {}: beamSource = waveOnFSMg what = 'beamFSMg{0}'.format(ip) outDict[what] = waveOnFSMg if p > 100 and wantKirchhoff: wrepeats = 1 waveOnFSMk = beamLine.fsmFar.prepare_wave(beamLine.source, x, z) for r in range(wrepeats): rw.diffract(beamSource, waveOnFSMk) if wrepeats > 1: print('wave repeats: {0} of {1} done'.format( r+1, wrepeats)) what = 'beamFSMk{0}'.format(ip) outDict[what] = waveOnFSMk return outDict
def run_process_wave(beamLine): # waveOnOE = beamLine.oe.prepare_wave(beamLine.source, nrays) # beamSource = beamLine.source.shine(wave=waveOnOE, fixedEnergy=E0) beamLine.source.uniformRayDensity = True beamSource = beamLine.source.shine(fixedEnergy=E0) beamFSMsource = beamLine.fsm0.expose(beamSource) outDict = {'beamFSMsource': beamFSMsource} for iR, R in enumerate(Rs): beamLine.oe.R = R oeGlobal, oeLocal = beamLine.oe.reflect(beamSource) waveOnSample = beamLine.fsm1.prepare_wave( beamLine.oe, beamLine.fsmExpX, beamLine.fsmExpZ) rw.diffract(oeLocal, waveOnSample) outDict['beamFSMrefl{0:02d}'.format(iR)] = waveOnSample outDict['oeLocal'] = oeLocal return outDict
def run_process_wave(beamLine): # waveOnOE = beamLine.oe.prepare_wave(beamLine.source, nrays) # beamSource = beamLine.source.shine(wave=waveOnOE, fixedEnergy=E0) beamLine.source.uniformRayDensity = True beamSource = beamLine.source.shine(fixedEnergy=E0) beamFSMsource = beamLine.fsm0.expose(beamSource) outDict = {'beamFSMsource': beamFSMsource} for iR, R in enumerate(Rs): beamLine.oe.R = R oeGlobal, oeLocal = beamLine.oe.reflect(beamSource) waveOnSample = beamLine.fsm1.prepare_wave(beamLine.oe, beamLine.fsmExpX, beamLine.fsmExpZ) rw.diffract(oeLocal, waveOnSample) outDict['beamFSMrefl{0:02d}'.format(iR)] = waveOnSample outDict['oeLocal'] = oeLocal return outDict
def run_process(beamLine): beamFSM1wave = beamLine.fsm1.prepare_wave(beamLine.slit, xmesh, zmesh) beamSource = None wrepeats = 1 for repeat in range(wrepeats): beamSource = beamLine.sources[0].shine(accuBeam=beamSource) beamFSM0 = beamLine.fsm0.expose(beamSource) waveOnSlit = beamLine.slit.propagate(beamSource) beamFSM1 = beamLine.fsm1.expose(beamSource) waveOnSlit.area = beamLine.slit.area rw.diffract(waveOnSlit, beamFSM1wave) if wrepeats > 1: print('wave repeats: {0} of {1} done'.format(repeat+1, wrepeats)) outDict = {'beamSource': beamSource, 'beamFSM0': beamFSM0, 'beamFSM1': beamFSM1, 'beamFSM1wave': beamFSM1wave } return outDict
def run_process(beamLine): area = ((beamLine.slit.opening[3] - beamLine.slit.opening[2]) * (beamLine.slit.opening[1] - beamLine.slit.opening[0])) waveOnScreen = beamLine.fsm1.prepare_wave(beamLine.slit, xmesh, zmesh) beamSource = None repeats = 1 for repeat in range(repeats): #alternative one (old): # beamSource = beamLine.source.shine( # accuBeam=beamSource, fixedEnergy=E0) # beamFSM0 = beamLine.fsm0.expose(beamSource) # slitLocal = beamLine.slit.propagate(beamSource) # beamFSM1 = beamLine.fsm1.expose(beamSource) # slitLocal.area = area # rw.diffract(slitLocal, waveOnScreen) #alternative two (new): waveOnSlit = beamLine.slit.prepare_wave(beamLine.source, mynrays) beamSource = beamLine.source.shine(accuBeam=beamSource, fixedEnergy=E0, wave=waveOnSlit) beamFSM0 = beamLine.fsm0.expose(beamSource) beamLine.slit.propagate(beamSource) beamFSM1 = beamLine.fsm1.expose(beamSource) waveOnSlit.area = area rw.diffract(waveOnSlit, waveOnScreen) if waveOnScreen.diffract_repeats == 0: break if repeats > 1: print('wave repeats: {0} of {1} done'.format(repeat + 1, repeats)) outDict = { 'beamSource': beamSource, 'beamFSM0': beamFSM0, 'beamFSM1': beamFSM1, 'waveOnScreen': waveOnScreen } return outDict
def run_process(beamLine): ygloS = beamLine.yglo * (beamLine.E / E_FZP) + p wavelen = len(ygloS) wave3Dpoints = rs.Beam(nrays=wavelen, forceState=1, withAmplitudes=True) rw.prepare_wave(beamLine.fzp, wave3Dpoints, beamLine.xglo, ygloS, beamLine.zglo) wave3Dpoints.dS = 1 wrepeats = 1 for repeat in range(wrepeats): beamSource = beamLine.sources[0].shine(withAmplitudes=True) outDict = {'beamSource': beamSource} beamLine.fluxIn = (beamSource.Jss + beamSource.Jpp).sum() oeGlobal, oeLocal = beamLine.fzp.reflect(beamSource) oeLocal.area = beamLine.fzp.area rw.diffract(oeLocal, wave3Dpoints) if wrepeats > 1: print('wave repeats: {0} of {1} done'.format(repeat + 1, wrepeats)) beamLine.intensityDiffr = wave3Dpoints.Jss + wave3Dpoints.Jpp return outDict
def run_process(beamLine): waveOnScreenF = beamLine.fsmF.prepare_wave( beamLine.diffoe, beamLine.xMeshF, beamLine.zMeshF) waveOnScreenH = beamLine.fsmH.prepare_wave( beamLine.diffoe, beamLine.xMeshH, beamLine.zMeshH) wrepeats = 2 for repeat in range(wrepeats): beamSource = beamLine.sources[0].shine( withAmplitudes=True, fixedEnergy=E0) beamToOE = beamSource if case.startswith('2mirrors'): oe0Global, oe0Local = beamLine.oe0.reflect(beamSource) beamToOE = oe0Global if isinstance(beamLine.diffoe, roe.OE): oeGlobal, oeLocal = beamLine.diffoe.reflect(beamToOE) elif isinstance(beamLine.diffoe, ra.RectangularAperture): oeLocal = beamLine.diffoe.propagate(beamToOE) oeGlobal = beamToOE else: raise ValueError('unknown diffracting element') beamFSMraysF = beamLine.fsmF.expose(oeGlobal) beamFSMraysH = beamLine.fsmH.expose(oeGlobal) rw.diffract(oeLocal, waveOnScreenF) rw.diffract(oeLocal, waveOnScreenH) if wrepeats > 1: print('wave repeats: {0} of {1} done'.format(repeat+1, wrepeats)) outDict = {'beamSource': beamSource, 'beamFSMwave_f': waveOnScreenF, 'beamFSMrays_f': beamFSMraysF, 'beamFSMwave_h': waveOnScreenH, 'beamFSMrays_h': beamFSMraysH, } return outDict
def run_process(beamLine): area = ((beamLine.slit.opening[3] - beamLine.slit.opening[2]) * (beamLine.slit.opening[1] - beamLine.slit.opening[0])) waveOnScreen = beamLine.fsm1.prepare_wave(beamLine.slit, xmesh, zmesh) beamSource = None repeats = 1 for repeat in range(repeats): #alternative one (old): # beamSource = beamLine.source.shine( # accuBeam=beamSource, fixedEnergy=E0) # beamFSM0 = beamLine.fsm0.expose(beamSource) # slitLocal = beamLine.slit.propagate(beamSource) # beamFSM1 = beamLine.fsm1.expose(beamSource) # slitLocal.area = area # rw.diffract(slitLocal, waveOnScreen) #alternative two (new): waveOnSlit = beamLine.slit.prepare_wave(beamLine.source, mynrays) beamSource = beamLine.source.shine(accuBeam=beamSource, fixedEnergy=E0, wave=waveOnSlit) beamFSM0 = beamLine.fsm0.expose(beamSource) beamLine.slit.propagate(beamSource) beamFSM1 = beamLine.fsm1.expose(beamSource) waveOnSlit.area = area rw.diffract(waveOnSlit, waveOnScreen) if waveOnScreen.diffract_repeats == 0: break if repeats > 1: print('wave repeats: {0} of {1} done'.format(repeat+1, repeats)) outDict = {'beamSource': beamSource, 'beamFSM0': beamFSM0, 'beamFSM1': beamFSM1, 'waveOnScreen': waveOnScreen } return outDict
def run_process_wave(beamLine, shineOnly1stSource=False): fixedEnergy = E0 waveOnSamples = [] for fsmExpCenter in beamLine.fsmExpCenters: beamLine.fsmExp.center = fsmExpCenter waveOnSample = beamLine.fsmExp.prepare_wave( beamLine.m5, beamLine.fsmExpX, beamLine.fsmExpZ) waveOnSamples.append(waveOnSample) wrepeats = 1 for repeat in range(wrepeats): if wrepeats > 1: print('wave repeats: {0} of {1} ...'.format(repeat+1, wrepeats)) waveOnSlit = beamLine.slitFE.prepare_wave(beamLine.source, nrays) beamSource = beamLine.source.shine(wave=waveOnSlit, fixedEnergy=fixedEnergy) beamFSM0 = waveOnSlit waveOnm1 = beamLine.m1.prepare_wave(beamLine.slitFE, nrays) beamTom1 = rw.diffract(waveOnSlit, waveOnm1) beamM1global, beamM1local = beamLine.m1.reflect( beamTom1, noIntersectionSearch=True) waveOnm2 = beamLine.m2.prepare_wave(beamLine.m1, nrays) beamTom2 = rw.diffract(beamM1local, waveOnm2) beamM2global, beamM2local = beamLine.m2.reflect( beamTom2, noIntersectionSearch=True) waveOnPG = beamLine.pg.prepare_wave(beamLine.m2, nrays) beamToPG = rw.diffract(beamM2local, waveOnPG) beamPGglobal, beamPGlocal = beamLine.pg.reflect( beamToPG, noIntersectionSearch=True) beamPGlocal.area = 0 beamPGlocal.areaFraction = beamLine.pg.areaFraction waveOnm3 = beamLine.m3.prepare_wave(beamLine.pg, nrays) beamTom3 = rw.diffract(beamPGlocal, waveOnm3) # beamM3local = waveOnm3 beamM3global, beamM3local = beamLine.m3.reflect( beamTom3, noIntersectionSearch=True) waveOnExitSlit = beamLine.exitSlit.prepare_wave(beamLine.m3, nrays) rw.diffract(beamM3local, waveOnExitSlit) beamExitSlit = waveOnExitSlit waveOnm4 = beamLine.m4.prepare_wave(beamLine.exitSlit, nrays) beamTom4 = rw.diffract(waveOnExitSlit, waveOnm4) beamM4global, beamM4local = beamLine.m4.reflect( beamTom4, noIntersectionSearch=True) waveOnm5 = beamLine.m5.prepare_wave(beamLine.m4, nrays) beamTom5 = rw.diffract(beamM4local, waveOnm5) beamM5global, beamM5local = beamLine.m5.reflect( beamTom5, noIntersectionSearch=True) for waveOnSample in waveOnSamples: rw.diffract(beamM5local, waveOnSample) outDict = {'beamSource': beamSource, 'beamFSM0': beamFSM0, 'beamM1local': beamM1local, 'beamM2local': beamM2local, 'beamPGlocal': beamPGlocal, 'beamM3local': beamM3local, 'beamExitSlit': beamExitSlit, 'beamM4local': beamM4local, 'beamM5local': beamM5local, } for ic, waveOnSample in enumerate(waveOnSamples): outDict['beamFSMExp{0:02d}'.format(ic)] = waveOnSample return outDict
def run_process_wave(beamLine, shineOnly1stSource=False): if isMono: fixedEnergy = E0 else: fixedEnergy = False waveOnSamples = [] for fsmExpCenter in beamLine.fsmExpCenters: beamLine.fsmExp.center = fsmExpCenter waveOnSample = beamLine.fsmExp.prepare_wave( beamLine.fzp, beamLine.fsmExpX, beamLine.fsmExpZ) waveOnSamples.append(waveOnSample) repeats = 1 for repeat in range(repeats): if repeats > 1: print('wave repeats: {0} of {1} ...'.format(repeat+1, repeats)) waveOnSlit = beamLine.slitFE.prepare_wave(beamLine.source, nrays) beamSource = beamLine.source.shine(wave=waveOnSlit, fixedEnergy=fixedEnergy) beamFSM0 = waveOnSlit waveOnm1 = beamLine.m1.prepare_wave(beamLine.slitFE, nrays) beamTom1 = rw.diffract(waveOnSlit, waveOnm1) beamM1global, beamM1local = beamLine.m1.reflect( beamTom1, noIntersectionSearch=True) waveOnm2 = beamLine.m2.prepare_wave(beamLine.m1, nrays) beamTom2 = rw.diffract(beamM1local, waveOnm2) beamM2global, beamM2local = beamLine.m2.reflect( beamTom2, noIntersectionSearch=True) waveOnPG = beamLine.pg.prepare_wave(beamLine.m2, nrays) beamToPG = rw.diffract(beamM2local, waveOnPG) beamPGglobal, beamPGlocal = beamLine.pg.reflect( beamToPG, noIntersectionSearch=True) beamPGlocal.area = 0 beamPGlocal.areaFraction = beamLine.pg.areaFraction # waveOnFSM3 = beamLine.fsm3.prepare_wave( # beamLine.pg, beamLine.fsm3X, beamLine.fsm3Z) # rw.diffract(beamPGlocal, waveOnFSM3) waveOnm3 = beamLine.m3.prepare_wave(beamLine.pg, nrays) beamTom3 = rw.diffract(beamPGlocal, waveOnm3) # beamM3local = waveOnm3 beamM3global, beamM3local = beamLine.m3.reflect( beamTom3, noIntersectionSearch=True) waveOnExitSlit = beamLine.exitSlit.prepare_wave(beamLine.m3, nrays) rw.diffract(beamM3local, waveOnExitSlit) beamExitSlit = waveOnExitSlit waveOnFZP = beamLine.fzp.prepare_wave( beamLine.exitSlit, nrays, shape='round') rw.diffract(waveOnExitSlit, waveOnFZP) beamFZPlocal = waveOnFZP for waveOnSample in waveOnSamples: rw.diffract(waveOnFZP, waveOnSample) outDict = {'beamSource': beamSource, 'beamFSM0': beamFSM0, 'beamM1local': beamM1local, 'beamM2local': beamM2local, 'beamPGlocal': beamPGlocal, #'waveOnFSM3': waveOnFSM3 'beamM3local': beamM3local, 'beamExitSlit': beamExitSlit, 'beamFZPlocal': beamFZPlocal, } for ic, waveOnSample in enumerate(waveOnSamples): outDict['beamFSMExp{0:02d}'.format(ic)] = waveOnSample return outDict
def run_process_wave(beamLine, shineOnly1stSource=False): fixedEnergy = E0 waveOnSamples = [] for fsmExpCenter in beamLine.fsmExpCenters: beamLine.fsmExp.center = fsmExpCenter waveOnSample = beamLine.fsmExp.prepare_wave(beamLine.m5, beamLine.fsmExpX, beamLine.fsmExpZ) waveOnSamples.append(waveOnSample) wrepeats = 1 for repeat in range(wrepeats): if wrepeats > 1: print('wave repeats: {0} of {1} ...'.format(repeat + 1, wrepeats)) waveOnSlit = beamLine.slitFE.prepare_wave(beamLine.source, nrays) beamSource = beamLine.source.shine(wave=waveOnSlit, fixedEnergy=fixedEnergy) beamFSM0 = waveOnSlit waveOnm1 = beamLine.m1.prepare_wave(beamLine.slitFE, nrays) beamTom1 = rw.diffract(waveOnSlit, waveOnm1) beamM1global, beamM1local = beamLine.m1.reflect( beamTom1, noIntersectionSearch=True) waveOnm2 = beamLine.m2.prepare_wave(beamLine.m1, nrays) beamTom2 = rw.diffract(beamM1local, waveOnm2) beamM2global, beamM2local = beamLine.m2.reflect( beamTom2, noIntersectionSearch=True) waveOnPG = beamLine.pg.prepare_wave(beamLine.m2, nrays) beamToPG = rw.diffract(beamM2local, waveOnPG) beamPGglobal, beamPGlocal = beamLine.pg.reflect( beamToPG, noIntersectionSearch=True) beamPGlocal.area = 0 beamPGlocal.areaFraction = beamLine.pg.areaFraction waveOnm3 = beamLine.m3.prepare_wave(beamLine.pg, nrays) beamTom3 = rw.diffract(beamPGlocal, waveOnm3) # beamM3local = waveOnm3 beamM3global, beamM3local = beamLine.m3.reflect( beamTom3, noIntersectionSearch=True) waveOnExitSlit = beamLine.exitSlit.prepare_wave(beamLine.m3, nrays) rw.diffract(beamM3local, waveOnExitSlit) beamExitSlit = waveOnExitSlit waveOnm4 = beamLine.m4.prepare_wave(beamLine.exitSlit, nrays) beamTom4 = rw.diffract(waveOnExitSlit, waveOnm4) beamM4global, beamM4local = beamLine.m4.reflect( beamTom4, noIntersectionSearch=True) waveOnm5 = beamLine.m5.prepare_wave(beamLine.m4, nrays) beamTom5 = rw.diffract(beamM4local, waveOnm5) beamM5global, beamM5local = beamLine.m5.reflect( beamTom5, noIntersectionSearch=True) for waveOnSample in waveOnSamples: rw.diffract(beamM5local, waveOnSample) outDict = { 'beamSource': beamSource, 'beamFSM0': beamFSM0, 'beamM1local': beamM1local, 'beamM2local': beamM2local, 'beamPGlocal': beamPGlocal, 'beamM3local': beamM3local, 'beamExitSlit': beamExitSlit, 'beamM4local': beamM4local, 'beamM5local': beamM5local, } for ic, waveOnSample in enumerate(waveOnSamples): outDict['beamFSMExp{0:02d}'.format(ic)] = waveOnSample return outDict