示例#1
0
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))
示例#2
0
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
示例#3
0
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
示例#4
0
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
示例#5
0
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
示例#6
0
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
示例#8
0
文件: warp.py 项目: kklmn/xrt
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
示例#9
0
文件: warp.py 项目: wholden/xrt
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
示例#10
0
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
示例#11
0
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
示例#12
0
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
示例#13
0
文件: waveMirrors.py 项目: kklmn/xrt
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
示例#14
0
文件: slitscan.py 项目: kklmn/xrt
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
示例#15
0
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
示例#16
0
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
示例#17
0
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