예제 #1
0
def compare_reflectivity():
    """A comparison subroutine used in the module test suit."""
    def for_one_material(stripe, refs, refp, theta, reprAngle):
        fig = plt.figure(figsize=(8, 6), dpi=100)
        fig.subplots_adjust(right=0.86)
        ax = fig.add_subplot(111)
        ax.set_xlabel('energy (eV)')
        ax.set_ylabel('reflectivity')
        ax.set_xlim(30, 5e4)
        fig.suptitle(stripe.name + ' ' + reprAngle, fontsize=16)
        x, R2s = np.loadtxt(refs, unpack=True)
        p1, = ax.plot(x, R2s, '-k', label='s xf1f2')
        x, R2s = np.loadtxt(refp, unpack=True)
        p2, = ax.plot(x, R2s, '--k', label='p xf1f2')
        refl = stripe.get_amplitude(E, math.sin(theta))
        rs, rp = refl[0], refl[1]
        p3, = ax.semilogx(E, abs(rs)**2, '-r')
        p4, = ax.semilogx(E, abs(rp)**2, '--r')
        l1 = ax.legend([p1, p2], ['s', 'p'], loc=3)
        ax.legend([p1, p3], ['Xf1f2/XOP', 'xrt'], loc=6)
        ax.add_artist(l1)
# phases:
        ax2 = ax.twinx()
        ax2.set_ylabel(r'$\phi_s - \phi_p$', color='c')
        phi = np.unwrap(np.angle(rs * rp.conj()))
        p9, = ax2.plot(E, phi, 'c', lw=2, yunits=math.pi, zorder=0)
        formatter = mpl.ticker.FormatStrFormatter('%g' + r'$ \pi$')
        ax2.yaxis.set_major_formatter(formatter)
        for tl in ax2.get_yticklabels():
            tl.set_color('c')

        fname = 'MirrorRefl' + stripe.name + "".join(reprAngle.split())
        fig.savefig(fname + '.png')

    dataDir = os.path.join('', 'XOP-Reflectivities')
    E = np.logspace(1.+math.log10(3.), 4.+math.log10(5.), 500)
    stripeSi = rm.Material('Si', rho=2.33)
    for_one_material(stripeSi,
                     os.path.join(dataDir, "Si05deg_s.xf1f2.gz"),
                     os.path.join(dataDir, "Si05deg_p.xf1f2.gz"),
                     math.radians(0.5), '@ 0.5 deg')
    stripePt = rm.Material('Pt', rho=21.45)
    for_one_material(stripePt,
                     os.path.join(dataDir, "Pt4mrad_s.xf1f2.gz"),
                     os.path.join(dataDir, "Pt4mrad_p.xf1f2.gz"),
                     4e-3, '@ 4 mrad')
    stripeSiO2 = rm.Material(('Si', 'O'), quantities=(1, 2), rho=2.2)
    for_one_material(stripeSiO2,
                     os.path.join(dataDir, "SiO205deg_s.xf1f2.gz"),
                     os.path.join(dataDir, "SiO205deg_p.xf1f2.gz"),
                     math.radians(0.5), '@ 0.5 deg')
    stripeRh = rm.Material('Rh', rho=12.41)
    for_one_material(stripeRh,
                     os.path.join(dataDir, "Rh2mrad_s.xf1f2.gz"),
                     os.path.join(dataDir, "Rh2mrad_p.xf1f2.gz"),
                     2e-3, '@ 2 mrad')
예제 #2
0
파일: mirror.py 프로젝트: marcocamma/sr
def get_material(atom="Pt", rho=None):
    """ 
    use rho='bulk' for bulk density
    use rho=None for default density of coating (90% of bulk for Pt)
    """
    if isinstance(rho,str) and rho == "bulk":
        rho = _bulk_densities[atom]
    elif rho is None:
        rho = _bulk_densities[atom] * _density_factor[atom]
    return rm.Material(atom, rho=rho)
예제 #3
0
def compare_reflectivity_slab():
    """A comparison subroutine used in the module test suit."""
    def for_one_material(stripe, refs, refp, E, reprEnergy):
        fig = plt.figure(figsize=(8, 6), dpi=100)
        fig.subplots_adjust(right=0.86)
        ax = fig.add_subplot(111)
        ax.set_xlabel('grazing angle (deg)')
        ax.set_ylabel('reflectivity')
        ax.set_xlim(0, 10)
        fig.suptitle(stripe.name + ' ' + reprEnergy, fontsize=16)
        x, R2s = np.loadtxt(refs, unpack=True)
        p1, = ax.plot(x, R2s, '-k', label='s Mlayer')
        x, R2s = np.loadtxt(refp, unpack=True)
        p2, = ax.plot(x, R2s, '--k', label='p Mlayer')
        refl = stripe.get_amplitude(E, np.sin(np.deg2rad(theta)))
        rs, rp = refl[0], refl[1]
        p3, = ax.semilogy(theta, abs(rs)**2, '-r')
        p4, = ax.semilogy(theta, abs(rp)**2, '--r')
        l1 = ax.legend([p1, p2], ['s', 'p'], loc=3)
        ax.legend([p1, p3], ['Mlayer/XOP', 'xrt'], loc=1)
        ax.add_artist(l1)
        ylim = ax.get_ylim()
        ax.set_ylim([ylim[0], 1])
# phases:
        ax2 = ax.twinx()
        ax2.set_ylabel(r'$\phi_s - \phi_p$', color='c')
        phi = np.unwrap(np.angle(rs * rp.conj()))
        p9, = ax2.plot(theta, phi, 'c', lw=2, yunits=math.pi, zorder=0)
        formatter = mpl.ticker.FormatStrFormatter('%g' + r'$ \pi$')
        ax2.yaxis.set_major_formatter(formatter)
        for tl in ax2.get_yticklabels():
            tl.set_color('c')

        ax2.set_zorder(-1)
        ax.patch.set_visible(False)  # hide the 'canvas'

        fname = 'SlabRefl' + stripe.name + ' ' + reprEnergy
        fig.savefig(fname + '.png')

    dataDir = os.path.join('', 'XOP-Reflectivities')
    theta = np.linspace(0, 10, 500)  # degrees
    layerW = rm.Material('W', kind='thin mirror', rho=19.3, t=2.5e-6)
    for_one_material(layerW,
                     os.path.join(dataDir, "W25A_10kev_s.mlayer.gz"),
                     os.path.join(dataDir, "W25A_10kev_p.mlayer.gz"), 1e4,
                     u'slab, t = 25 Å, @ 10 keV')
예제 #4
0
def compare_absorption_coeff():
    """A comparison subroutine used in the module test suit."""
    def for_one_material(m):
        rf = os.path.join(dataDir, "{0}_absCoeff.xcrosssec.gz".format(m.name))
        title = u'Absorption in {0}'.format(mat.name)
        fig = plt.figure(figsize=(8, 6), dpi=100)
        ax = fig.add_subplot(111)
        ax.set_xlabel('energy (eV)')
        ax.set_ylabel(r'$\mu_0$ (cm$^{-1}$)')
        fig.suptitle(title, fontsize=16)
        x, mu0 = np.loadtxt(rf, unpack=True)
        p1, = ax.loglog(x, mu0, '-k', lw=2, label='XCrossSec')
        calcmu0 = m.get_absorption_coefficient(E)
        p3, = ax.loglog(E, calcmu0, '-r', label='xrt')
        ax.legend(loc=1)
        ax.set_xlim(E[0], E[-1])
        fname = title
        fig.savefig(fname + '.png')

    dataDir = os.path.join('', 'XOP-Reflectivities')
    E = np.logspace(1+math.log10(2.), 4.+math.log10(3.), 500)

#    mat = rm.Material('Be', rho=1.848)
#    for_one_material(mat)
#    mat = rm.Material('Ag', rho=10.50)
#    mat = rm.Material('Ag', rho=10.50, table='Henke')
#    for_one_material(mat)
    mat = rm.Material('Al', rho=2.6989)
    for_one_material(mat)
#    mat = rm.Material('Au', rho=19.3)
#    for_one_material(mat)
#    mat = rm.Material('Ni', rho=8.902)
#    for_one_material(mat)
    E = 30000
    print("abs coeff at {0} keV = {1} 1/cm".format(
        E*1e-3, mat.get_absorption_coefficient(E)))
    print("refr index at {0} keV = {1}".format(
        E*1e-3, mat.get_refractive_index(E)))
예제 #5
0
def compare_transmittivity():
    """A comparison subroutine used in the module test suit."""
    def for_one_material(mat, thickness, ref1, title, sname):
        fig = plt.figure(figsize=(8, 6), dpi=100)
        ax = fig.add_subplot(111)
        ax.set_xlabel('energy (eV)')
        ax.set_ylabel('transmittivity')
        fig.suptitle(title, fontsize=16)
        x, tr = np.loadtxt(ref1, unpack=True)
        p1, = ax.semilogx(x, tr, '-k', lw=2, label='XPower/XOP')
        calcmu0 = mat.get_absorption_coefficient(E)
        transm = np.exp(-calcmu0 * thickness)
        p3, = ax.semilogx(E, transm, '-r', label='xrt')
        ax.legend(loc=2)
        ax.set_xlim(E[0], E[-1])
        fname = 'Transm' + sname
        fig.savefig(fname + '.png')

    dataDir = os.path.join('', 'XOP-Reflectivities')
    E = np.logspace(2.+math.log10(3.), 4.+math.log10(3.), 500)
    matDiamond = rm.Material('C', rho=3.52)
    for_one_material(matDiamond, 60*1e-4,
                     os.path.join(dataDir, "Diamond60mum.xpower.gz"),
                     r'Transmittivity of 60-$\mu$m-thick diamond', 'Diamond')
예제 #6
0
# -*- coding: utf-8 -*-
__author__ = "Konstantin Klementiev, Roman Chernikov"
__date__ = "22 Jan 2016"
import numpy as np
import matplotlib.pyplot as plt
# path to xrt:
import os, sys
sys.path.append(os.path.join('..', '..', '..'))  # analysis:ignore
import xrt.backends.raycing.materials as rm

matDiamond = rm.Material('C', rho=3.52)

E = np.logspace(2 + np.log10(3), 4 + np.log10(3), 501)
thickness = 0.06  # mm
mu = matDiamond.get_absorption_coefficient(E)  # in cm^-1
transm = np.exp(-mu * thickness * 0.1)

plt.semilogx(E, transm)
plt.gca().set_xlim(E[0], E[-1])
plt.show()
예제 #7
0
__date__ = "08 Mar 2016"
import os, sys
sys.path.append(os.path.join('..', '..', '..'))  # analysis:ignore
import numpy as np

import xrt.backends.raycing as raycing
import xrt.backends.raycing.sources as rs
#import xrt.backends.raycing.apertures as ra
import xrt.backends.raycing.oes as roe
import xrt.backends.raycing.run as rr
import xrt.backends.raycing.materials as rm
import xrt.plotter as xrtp
import xrt.runner as xrtr
import xrt.backends.raycing.screens as rsc

mGold = rm.Material('Au', rho=19.3, kind='FZP')
E0, dE = 400, 5


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),
예제 #8
0
파일: BalderDMM.py 프로젝트: silexanaej/xrt
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
예제 #9
0
파일: crl_stack.py 프로젝트: silexanaej/xrt
E0 = 9000.  # eV
p = 1000.  # source to 1st lens
q = 5000.  # 1st lens to focus
xyLimits = -5, 5

#Lens = roe.ParaboloidFlatLens
Lens = roe.DoubleParaboloidLens
#Lens = roe.ParabolicCylinderFlatLens
if Lens == roe.DoubleParaboloidLens:
    lensName = '2-'
elif Lens == roe.ParaboloidFlatLens:
    lensName = '1-'
else:
    lensName = '3-'

mBeryllium = rm.Material('Be', rho=1.848, kind='lens')
#mDiamond = rm.Material('C', rho=3.52, kind='lens')
mAluminum = rm.Material('Al', rho=2.7, kind='lens')
#mSilicon = rm.Material('Si', rho=2.33, kind='lens')
#mNickel = rm.Material('Ni', rho=8.9, kind='lens')
#mLead = rm.Material('Pb', rho=11.35, kind='lens')


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,
예제 #10
0
# -*- coding: utf-8 -*-
__author__ = "Konstantin Klementiev, Roman Chernikov"
__date__ = "22 Jan 2016"
import numpy as np
import matplotlib.pyplot as plt
# path to xrt:
import os, sys; sys.path.append(os.path.join('..', '..', '..'))  # analysis:ignore
import xrt.backends.raycing.materials as rm

substrate = rm.Material('Si', rho=2.33)
coating = rm.Material('Rh', rho=12.41, kind='mirror')
cMirror = rm.Coated(coating=coating, cThickness=300, substrate=substrate,
                    surfaceRoughness=30, substRoughness=30)

# E = np.logspace(1 + np.log10(3), 4 + np.log10(5), 501)
E = np.linspace(100, 29999, 1001)
theta = 4e-3
rs, rp = cMirror.get_amplitude(E, np.sin(theta))[0:2]
rs0, rp0 = coating.get_amplitude(E, np.sin(theta))[0:2]
# plt.semilogx(E, abs(rs)**2, 'r', E, abs(rp)**2, 'b')
refs, refp = plt.plot(E, abs(rs)**2, 'r', E, abs(rp)**2, 'b--')
refs0, refp0 = plt.plot(E, abs(rs0)**2, 'm', E, abs(rp0)**2, 'c--')
plt.legend([refs, refp, refs0, refp0],
           ['coated s-pol', 'coated p-pol', 'pure s-pol', 'pure p-pol'])
plt.gca().set_xlim(E[0], E[-1])
plt.show()
예제 #11
0
파일: BalderFlux.py 프로젝트: wholden/xrt
#import matplotlib as mpl
import numpy as np
import matplotlib.pyplot as plt
import xlwt

import xrt.backends.raycing as raycing
import xrt.backends.raycing.sources as rs
#import xrt.backends.raycing.apertures as ra
#import xrt.backends.raycing.oes as roe
#import xrt.backends.raycing.run as rr
import xrt.backends.raycing.materials as rm
#import xrt.backends.raycing.screens as rsc

#stripeSi = rm.Material('Si', rho=2.33)
#stripeSiO2 = rm.Material(('Si', 'O'), quantities=(1, 2), rho=2.2)
stripePt = rm.Material('Pt', rho=21.45)
#filterDiamond = rm.Material('C', rho=3.52, kind='plate')
#si = rm.CrystalSi(hkl=(1, 1, 1), tK=-171+273.15)

eMax = 200  # keV


def run(case):
    myBalder = raycing.BeamLine(azimuth=0, height=0)
    kwargs = dict(name='SoleilW50',
                  center=(0, 0, 0),
                  period=50.,
                  K=8.446,
                  n=39,
                  eE=3.,
                  eI=0.5,
예제 #12
0
파일: calc_mirror.py 프로젝트: wholden/xrt
# -*- coding: utf-8 -*-
__author__ = "Konstantin Klementiev, Roman Chernikov"
__date__ = "22 Jan 2016"
import numpy as np
import matplotlib.pyplot as plt
# path to xrt:
import os, sys
sys.path.append(os.path.join('..', '..', '..'))  # analysis:ignore
import xrt.backends.raycing.materials as rm

stripe = rm.Material(('Si', 'O'), quantities=(1, 2), rho=2.2)

E = np.logspace(1 + np.log10(3), 4 + np.log10(5), 501)
theta = 7e-3
rs, rp = stripe.get_amplitude(E, np.sin(theta))[0:2]

plt.semilogx(E, abs(rs)**2, 'r', E, abs(rp)**2, 'b')
plt.gca().set_xlim(E[0], E[-1])
plt.show()
예제 #13
0
def compare_reflectivity_coated():
    """A comparison subroutine used in the module test suit."""
    def for_one_material(stripe, strOnly, refs, refp, theta, reprAngle):
        fig = plt.figure(figsize=(8, 6), dpi=100)
        fig.subplots_adjust(right=0.86)
        ax = fig.add_subplot(111)
        ax.set_xlabel('energy (keV)')
        ax.set_ylabel('reflectivity')
        # ax.set_xlim(100, 4e4)
        ax.set_ylim(1e-7, 2)
        fig.suptitle(stripe.name + ' ' + reprAngle, fontsize=16)
        x, R2s = np.loadtxt(refs, unpack=True, skiprows=2, usecols=(0, 1))
        p1, = ax.semilogy(x*1e-3, R2s, '-k', label='s CXRO')
        x, R2s = np.loadtxt(refp, unpack=True, skiprows=2, usecols=(0, 1))
        p2, = ax.semilogy(x*1e-3, R2s, '--k', label='p CXRO')
        refl = stripe.get_amplitude(E, math.sin(theta))
        rs, rp = refl[0], refl[1]
        rs0, rp0 = strOnly.get_amplitude(E, math.sin(theta))[0:2]
        p3, = ax.semilogy(E*1e-3, abs(rs)**2, '-r')
        p4, = ax.semilogy(E*1e-3, abs(rp)**2, '--r')
        p5, = ax.semilogy(E*1e-3, abs(rs0)**2, '-m')
        p6, = ax.semilogy(E*1e-3, abs(rp0)**2, '--c')
        l1 = ax.legend([p1, p2], ['s', 'p'], loc=3)
        ax.legend([p1, p3, p5], ['CXRO', 'xrt', 'bulk coating'], loc=1)
        ax.add_artist(l1)
# phases:
        ax2 = ax.twinx()
        ax2.set_ylabel(r'$\phi_s - \phi_p$', color='c')
        phi = np.unwrap(np.angle(rs * rp.conj()))
        p9, = ax2.plot(E*1e-3, phi, 'c', lw=2, yunits=math.pi, zorder=0)
        formatter = mpl.ticker.FormatStrFormatter('%g' + r'$ \pi$')
        ax2.yaxis.set_major_formatter(formatter)
        for tl in ax2.get_yticklabels():
            tl.set_color('c')

        ax2.set_zorder(-1)
        ax.patch.set_visible(False)  # hide the 'canvas'

        fname = 'MirrorRefl' + stripe.name + "".join(reprAngle.split())
        fig.savefig(fname + '.png')

    dataDir = os.path.join('', 'CXRO-Reflectivities')
    E = np.logspace(2., 4.+math.log10(4.), 1000)
    mSi = rm.Material('Si', rho=2.33)
    mSiO2 = rm.Material(('Si', 'O'), quantities=(1, 2), rho=2.65)
#    mB4C = rm.Material(('B', 'C'), quantities=(4, 1), rho=2.52)
    mRh = rm.Material('Rh', rho=12.41, kind='mirror')
    mC = rm.Material('C', rho=3.5, kind='mirror')
    cRhSi = rm.Coated(coating=mRh, cThickness=300,
                      substrate=mSi, surfaceRoughness=20,
                      substRoughness=20, name='30 nm Rh on Si')
    cCSiO2 = rm.Coated(coating=mC, cThickness=200,
                        substrate=mSiO2, surfaceRoughness=10,
                        substRoughness=10, name='20 nm Diamond on Quartz')
    for_one_material(cRhSi, mRh,
                     os.path.join(dataDir, "RhSi_s_rough2.CXRO.gz"),
                     os.path.join(dataDir, "RhSi_p_rough2.CXRO.gz"),
                     4e-3, '@ 4 mrad,\nRMS roughness 2 nm')

    for_one_material(cCSiO2, mC,
                      os.path.join(dataDir, "CSiO2_s_rough1.CXRO.gz"),
                      os.path.join(dataDir, "CSiO2_p_rough1.CXRO.gz"),
                      np.radians(0.2), '@ 0.2 deg,\nRMS roughness 1 nm')
예제 #14
0
#import matplotlib as mpl
import matplotlib.pyplot as plt

import xrt.backends.raycing as raycing
import xrt.backends.raycing.sources as rs
import xrt.backends.raycing.apertures as ra
import xrt.backends.raycing.oes as roe
import xrt.backends.raycing.run as rr
import xrt.backends.raycing.materials as rm
import xrt.plotter as xrtp
import xrt.runner as xrtr
import xrt.backends.raycing.screens as rsc

showIn3D = False

mGold = rm.Material('Au', rho=19.3)
mGoldenGrating = rm.Material('Au',
                             rho=19.3,
                             kind='grating',
                             efficiency=[(1, 2)],
                             efficiencyFile='efficiency1-LEG.txt')
#    efficiency=[(1, 1)], efficiencyFile='efficiency1-LEG.pickle')
#    efficiency=[(1, 0.3)])
#    )
E0 = 80.
dE = 0.01

#distE = 'lines'
#energies = np.linspace(E0-dE, E0+dE, 5)

distE = 'flat'
예제 #15
0
# -*- coding: utf-8 -*-
__author__ = "Konstantin Klementiev"
__date__ = "14 Mar 2019"
import numpy as np
import matplotlib.pyplot as plt
# path to xrt:
import os, sys
sys.path.append(os.path.join('..', '..', '..'))  # analysis:ignore
import xrt.backends.raycing.materials as rm

mSi = rm.Material('Si', rho=2.33)
mAu = rm.Material('Au', rho=19.3)
mC = rm.Material('C', rho=2.26)
mAuCont = rm.Multilayer(
    tLayer=mC,
    tThickness=10,  # in Å
    bLayer=mAu,
    bThickness=400,
    substrate=mSi,
    nPairs=1,
    idThickness=2)

E = np.linspace(10, 120, 110)  # degrees
theta = np.radians(7) * np.ones_like(E)
rs, rp = mAu.get_amplitude(E, np.sin(theta))[0:2]
plt.plot(E, abs(rs)**2, label='s-pol Au')
plt.plot(E, abs(rp)**2, label='p-pol Au')

rs, rp = mAuCont.get_amplitude(E, np.sin(theta))[0:2]
plt.plot(E, abs(rs)**2, label='s-pol Au with 4 nm C')
plt.plot(E, abs(rp)**2, label='p-pol Au with 4 nm C')
예제 #16
0
파일: Grating.py 프로젝트: silexanaej/xrt
__date__ = "08 Mar 2016"
import os, sys; sys.path.append(os.path.join('..', '..', '..'))  # analysis:ignore
import numpy as np
import xrt.backends.raycing as raycing
import xrt.backends.raycing.sources as rs
#import xrt.backends.raycing.apertures as ra
import xrt.backends.raycing.oes as roe
import xrt.backends.raycing.run as rr
import xrt.backends.raycing.materials as rm
import xrt.plotter as xrtp
import xrt.runner as xrtr
import xrt.backends.raycing.screens as rsc

showIn3D = False

mGold = rm.Material('Au', rho=19.3, kind='grating')

gratingKind = 'y-grating'
if gratingKind == 'x-grating':
    rho, fsm2pos = 3000., 15880.
elif gratingKind == 'y-grating':
    rho, fsm2pos = -100., 25000.
else:
    raise


class Grating(roe.OE):
    def local_g(self, x, y, rho=rho):
        """Must be directed toward the positive oreder direction!"""
        if gratingKind == 'x-grating':
            return rho, 0, 0  # constant line spacing along x
예제 #17
0
#Materials and crystal planes

import sys
# sys.path.append(r'C:\Users\espov\Documents\Python\xrt')
sys.path.append('/mnt/c/Users/espov/Documents/Python/xrt')
import xrt.backends.raycing.materials as rmats

matRh = rmats.Material(elements=r"Rh",
                       kind=r"mirror",
                       rho=12.41,
                       table=r"Chantler",
                       name=None)

Si111_300K = rmats.CrystalSi(tK=300.0, name=None)

Si111_125K = rmats.CrystalSi(tK=125.0, name=None)

Si555_300K = rmats.CrystalSi(tK=300.0, hkl=[5, 5, 5], name=None)

Quartz102_300K = rmats.CrystalFromCell(
    name=r"alphaQuartz",
    hkl=[1, 0, 2],
    a=4.91304,
    c=5.40463,
    gamma=120,
    atoms=[14, 14, 14, 8, 8, 8, 8, 8, 8],
    atomsXYZ=[[0.4697, 0.0, 0.0], [-0.4697, -0.4697, 0.3333333333333333],
              [0.0, 0.4697, 0.6666666666666666], [0.4125, 0.2662, 0.1188],
              [-0.1463, -0.4125, 0.4521], [-0.2662, 0.1463, -0.2145],
              [0.1463, -0.2662, -0.1188], [-0.4125, -0.1463, 0.2145],
              [0.2662, 0.4125, 0.5479]],
예제 #18
0
def compare_reflectivity_multilayer():
    """A comparison subroutine used in the module test suit."""
#    cl_list = None
    try:
        import pyopencl as cl
        os.environ['PYOPENCL_COMPILER_OUTPUT'] = '1'
        isOpenCL = True
    except ImportError:
        isOpenCL = False

    if isOpenCL:
        import xrt.backends.raycing.myopencl as mcl
        matCL = mcl.XRT_CL(r'materials.cl')
#        cl_list = matCL.cl_ctx[0], matCL.cl_queue[0], matCL.cl_program[0]
    else:
        matCL = None

    def for_one_material(ml, refs, E, label, flabel=''):
        fig = plt.figure(figsize=(8, 6), dpi=100)
        fig.subplots_adjust(right=0.86)
        ax = fig.add_subplot(111)
        ax.set_xlabel('grazing angle (deg)')
        ax.set_ylabel('reflectivity')
        ax.set_xlim(theta[0], theta[-1])
        fig.suptitle(label, fontsize=14)
        x, R2s = np.loadtxt(refs, unpack=True)
        p1, = ax.plot(x, R2s, '-k', label='s Mlayer')
        refl = ml.get_amplitude(E, np.sin(np.deg2rad(theta)), ucl=matCL)
        rs, rp = refl[0], refl[1]
        p3, = ax.plot(theta, abs(rs)**2, '-r', lw=1)
        p4, = ax.plot(theta, abs(rp)**2, '--r')
        l1 = ax.legend([p3, p4], ['s', 'p'], loc=3)
        ax.legend([p1, p3], ['Mlayer/XOP', 'xrt'], loc=1)
        ax.add_artist(l1)
        ylim = ax.get_ylim()
        ax.set_ylim([ylim[0], 1])
# phases:
        ax2 = ax.twinx()
        ax2.set_ylabel(r'$\phi_s - \phi_p$', color='c')
        phi = np.unwrap(np.angle(rs * rp.conj()))
        p9, = ax2.plot(theta, phi, 'c', lw=1, yunits=math.pi, zorder=0)
        formatter = mpl.ticker.FormatStrFormatter('%g' + r'$ \pi$')
        ax2.yaxis.set_major_formatter(formatter)
        for tl in ax2.get_yticklabels():
            tl.set_color('c')
        ax2.set_xlim(theta[0], theta[-1])

        ax2.set_zorder(-1)
        ax.patch.set_visible(False)  # hide the 'canvas'

        fname = 'Multilayer' + ml.tLayer.name + ml.bLayer.name
        fig.savefig(fname + flabel)

    dataDir = os.path.join('', 'XOP-Reflectivities')
    theta = np.linspace(0, 1.6, 801)  # degrees
    mSi = rm.Material('Si', rho=2.33)
    mW = rm.Material('W', rho=19.3)

    mL = rm.Multilayer(mSi, 27, mW, 18, 40, mSi)
    for_one_material(mL, os.path.join(dataDir, "WSi45A04.mlayer.gz"), 8050,
                     u'40 × [27 Å Si + 18 Å W] multilayer @ 8.05 keV')

    mL = rm.Multilayer(mSi, 27*2, mW, 18*2, 40, mSi, 27, 18, 2)
    for_one_material(mL, os.path.join(dataDir, "WSi45_100A40.mlayer.gz"), 8050,
                     u'Depth graded multilayer \n 40 × [54 Å Si + 36 Å W]'
                     u' to [27 Å Si + 18 Å W] @ 8.05 keV', '-graded')
예제 #19
0
import numpy as np
import matplotlib as mpl
import matplotlib.pyplot as plt

import xrt.backends.raycing as raycing
import xrt.backends.raycing.sources as rs
#import xrt.backends.raycing.apertures as ra
import xrt.backends.raycing.oes as roe
import xrt.backends.raycing.run as rr
import xrt.backends.raycing.materials as rm
import xrt.plotter as xrtp
import xrt.runner as xrtr
import xrt.backends.raycing.screens as rsc

#mGold = rm.Material('Au', rho=19.3)
mGlass = rm.Material(('Si', 'O'), quantities=(1, 2), rho=2.2)


class BentCapillary(roe.OE):
    def __init__(self, *args, **kwargs):
        self.rSample = kwargs.pop('rSample')
        self.entranceAlpha = kwargs.pop('entranceAlpha')
        self.f = kwargs.pop('f')
        self.r0in = kwargs.pop('rIn')
        self.r0out = kwargs.pop('rOut')
        roe.OE.__init__(self, *args, **kwargs)

        s0 = self.f - self.rSample * np.cos(self.entranceAlpha)
        self.a0 = -np.tan(self.entranceAlpha) / 2 / s0
        self.b0 = self.rSample * np.sin(self.entranceAlpha) - self.a0 * s0**2
        self.s0 = s0
예제 #20
0
def compare_reflectivity_multilayer_interdiffusion():
    """A comparison subroutine used in the module test suit."""
#    cl_list = None
    try:
        import pyopencl as cl
        os.environ['PYOPENCL_COMPILER_OUTPUT'] = '1'
        isOpenCL = True
    except ImportError:
        isOpenCL = False

    if isOpenCL:
        import xrt.backends.raycing.myopencl as mcl
        matCL = mcl.XRT_CL(r'materials.cl')
#        cl_list = matCL.cl_ctx[0], matCL.cl_queue[0], matCL.cl_program[0]
    else:
        matCL = None

    def for_one_material(ml, refs, E, label, flabel=''):
        fig = plt.figure(figsize=(8, 6), dpi=100)
        fig.subplots_adjust(right=0.86)
        ax = fig.add_subplot(111)
        ax.set_xlabel('grazing angle (deg)')
        ax.set_ylabel('reflectivity')
        ax.set_xlim(theta[0], theta[-1])
        fig.suptitle(label, fontsize=14)

        x, R2s = np.loadtxt(refs, unpack=True, skiprows=2, usecols=(0, 1))
        refl = ml.get_amplitude(E, np.sin(np.deg2rad(theta)), ucl=matCL)
        rs, rp = refl[0], refl[1]

# amplitudes:
        p1, = ax.plot(x, R2s, '-k', label='s CXRO')
        p3, = ax.plot(theta, abs(rs)**2, '-r', lw=1)
        p4, = ax.plot(theta, abs(rp)**2, '--r')
        l1 = ax.legend([p3, p4], ['s', 'p'], loc=3)
        ax.legend([p1, p3], ['CXRO-Multilayer', 'xrt'], loc=1)
        ax.add_artist(l1)
        ylim = ax.get_ylim()
        ax.set_ylim([ylim[0], 1])

# phases:
        ax2 = ax.twinx()
        ax2.set_ylabel(r'$\phi_s - \phi_p$', color='c')
        phi = np.unwrap(np.angle(rs * rp.conj()))
        p9, = ax2.plot(theta, phi, 'c', lw=1, yunits=math.pi)
        ax2.set_ylim(-0.001, 0.001)
        formatter = mpl.ticker.FormatStrFormatter('%g' + r'$ \pi$')
        ax2.yaxis.set_major_formatter(formatter)
        for tl in ax2.get_yticklabels():
            tl.set_color('c')
        ax2.set_xlim(theta[0], theta[-1])

        ax2.set_zorder(-1)
        ax.patch.set_visible(False)  # hide the 'canvas'

        fname = 'Multilayer' + ml.tLayer.name + ml.bLayer.name
        fig.savefig(fname + flabel)

    dataDir = os.path.join('', 'CXRO-Reflectivities')
    theta = np.linspace(0, 1.6, 1001)  # degrees
    mSi = rm.Material('Si', rho=2.33)
    mW = rm.Material('W', rho=19.3)

    mL = rm.Multilayer(mSi, 17.82, mW, 11.88, 300, mSi, idThickness=0)
    for_one_material(mL, os.path.join(dataDir, "WSi300id0.CXRO.gz"), 24210,
                     u'300 × [17.82 Å Si + 11.88 Å W] multilayer @ 24.21 keV\nInterdiffusion RMS 0 Å',
                     'CXRO_id0')

    mL = rm.Multilayer(mSi, 17.82, mW, 11.88, 300, mSi, idThickness=6)
    for_one_material(mL, os.path.join(dataDir, "WSi300id6.CXRO.gz"), 24210,
                     u'300 × [17.82 Å Si + 11.88 Å W] multilayer @ 24.21 keV\nInterdiffusion RMS 6 Å',
                     'CXRO_id6')
예제 #21
0
# -*- coding: utf-8 -*-
__author__ = "Konstantin Klementiev, Roman Chernikov"
__date__ = "22 Jan 2016"
import numpy as np
import matplotlib.pyplot as plt
# path to xrt:
import os, sys
sys.path.append(os.path.join('..', '..', '..'))  # analysis:ignore
import xrt.backends.raycing.materials as rm

mSi = rm.Material('Si', rho=2.33)
mW = rm.Material('W', rho=19.3)
mL = rm.Multilayer(mSi, 27, mW, 18, 40, mSi)

E = 10000
theta = np.linspace(0, 2.0, 1001)  # degrees
rs, rp = mL.get_amplitude(E, np.sin(np.deg2rad(theta)))[0:2]

plt.plot(theta, abs(rs)**2, theta, abs(rp)**2)
plt.show()
예제 #22
0
파일: MontelMirror.py 프로젝트: wholden/xrt
__author__ = "Konstantin Klementiev", "Roman Chernikov"
__date__ = "08 Mar 2016"
import os, sys
sys.path.append(os.path.join('..', '..', '..'))  # analysis:ignore
import numpy as np
import xrt.backends.raycing as raycing
import xrt.backends.raycing.sources as rs
#import xrt.backends.raycing.apertures as ra
import xrt.backends.raycing.oes as roe
import xrt.backends.raycing.run as rr
import xrt.backends.raycing.materials as rm
import xrt.plotter as xrtp
import xrt.runner as xrtr
import xrt.backends.raycing.screens as rsc

mGold = rm.Material('Au', rho=19.3)

E0 = 9000.
L = 1200.
W = 10.
gap = 0.2
pitchVFM = 4e-3
pVFM = 20000.
qVFM = 400000000.
pitchHFM = 4e-3
pHFM = 20000.
qHFM = 400000000.
p = pVFM
q = 2000

#Select a case:
예제 #23
0
def plot_generator(plots, plotsFSM2, beamLine):
    if Lens == roe.DoubleParaboloidLens:
        nFactor = 0.5
    elif Lens == roe.ParaboloidFlatLens:
        nFactor = 1.
    else:
        nFactor = 2.

    mBeryllium = rm.Material('Be', rho=1.848, kind='lens')
    get_nCRL(mBeryllium, parabolaParam, q, E0, nFactor)
    mDiamond = rm.Material('C', rho=3.52, kind='lens')
    get_nCRL(mDiamond, parabolaParam, q, E0, nFactor)
    mAluminum = rm.Material('Al', rho=2.7, kind='lens')
    get_nCRL(mAluminum, parabolaParam, q, E0, nFactor)
    mSilicon = rm.Material('Si', rho=2.33, kind='lens')
    get_nCRL(mSilicon, parabolaParam, q, E0, nFactor)
    mNickel = rm.Material('Ni', rho=8.9, kind='lens')
    get_nCRL(mNickel, parabolaParam, q, E0, nFactor)
    mLead = rm.Material('Pb', rho=11.35, kind='lens')
    get_nCRL(mLead, parabolaParam, q, E0, nFactor)

    #    materials = mBeryllium, mDiamond, mAluminum, mSilicon, mNickel, mLead
    materials = mBeryllium, mDiamond

    print('At E = {0} eV and parabola focus = {1} mm:'.format(
        E0, parabolaParam))
    for material in materials:
        print(' n({0}) = {1}'.format(material.elements[0].name, material.nCRL))


#    polarization = [
#        'horizontal', 'vertical', '+45', '-45', 'right', 'left', None]
    polarization = 'hor',

    figDF = plt.figure(figsize=(7, 5), dpi=72)
    ax1 = plt.subplot(111)
    ax1.set_title(r'FWHM size of beam cross-section near focal position')
    ax1.set_xlabel(r'd$q$ (mm)', fontsize=14)
    ax1.set_ylabel(u'FWHM size (µm)', fontsize=14)

    figI = plt.figure(figsize=(7, 5), dpi=72)
    ax2 = plt.subplot(111)
    ax2.set_title(r'relative flux at sample position')
    ax2.set_xlabel('material', fontsize=14)
    ax2.set_ylabel(u'flux (a.u.)', fontsize=14)

    prefix = 'CRL-indiv-'

    for pol in polarization:
        beamLine.sources[0].polarization = pol
        suffix = pol
        if suffix is None:
            suffix = 'none'
        xMaterials = []
        yFlux = []
        for material in materials:
            beamLine.curMaterial = material
            beamLine.lens.material = material
            beamLine.lens.center = [0, p, 0]
            elem = material.elements[0].name
            print(elem)
            for plot in plots:
                fileName = '{0}{1}{2}-{3}-{4}'.format(prefix, lensName, elem,
                                                      suffix, plot.title)
                plot.saveName = fileName + '.png'
                #                plot.persistentName = fileName + '.pickle'
                try:
                    plot.textPanel.set_text(
                        plot.textPanelTemplate.format(elem))
                except AttributeError:
                    pass
            yield
            xCurve = []
            yCurve = []
            for dq, plot in zip(beamLine.fsm2.dqs, plotsFSM2):
                if plot.dx < (xyLimits[1] - xyLimits[0]) * 0.5:
                    #                    print(dq, plot.dx)
                    xCurve.append(dq)
                    yCurve.append(plot.dx)
            yFlux.append(plotsFSM2[-1].intensity)
            ax1.plot(xCurve,
                     yCurve,
                     'o',
                     label='{0}, n={1:.0f}'.format(elem, round(material.nCRL)))
            xMaterials.append(elem)
    ax1.legend(loc=4)  # lower right
    figDF.savefig(prefix + lensName + 'depthOfFocus.png')
    #    plt.close(figDF)

    rects = ax2.bar(np.arange(len(materials)) + 0.1,
                    np.array(yFlux) / max(yFlux),
                    bottom=1e-3,
                    log=True)
    for rect, material in zip(rects, materials):
        height = rect.get_height()
        ax2.text(rect.get_x() + rect.get_width() / 2.,
                 0.9 * height,
                 'n=%d' % material.nCRL,
                 ha='center',
                 va='top',
                 color='w')
    ax2.set_xticks(np.arange(len(materials)) + 0.5)
    ax2.set_xticklabels(xMaterials)
    ax2.set_ylim(1e-3, 1)
    figI.savefig(prefix + lensName + 'Flux.png')
예제 #24
0
# -*- coding: utf-8 -*-
__author__ = "Konstantin Klementiev, Roman Chernikov"
__date__ = "1 Nov 2019"
import numpy as np
import matplotlib.pyplot as plt
# path to xrt:
import os, sys
sys.path.append(os.path.join('..', '..', '..'))  # analysis:ignore
import xrt.backends.raycing.materials as rm

#mSi = rm.Material('Si', rho=2.33)
#mW = rm.Material('W', rho=19.3)
#mL = rm.Multilayer(mSi, 27, mW, 18, 40, mSi)

mSi = rm.Material('Si', rho=2.33)
mW = rm.Material('W', rho=19.3)
mB4C = rm.Material(['B', 'C'], [4, 1], rho=2.52)
mL = rm.Multilayer(mB4C, 16, mW, 8, 150, mSi)

theta = 1.5

plt.subplot(121)
E = np.linspace(9.5, 10.5, 1001) * 1e3  # eV
rs, rp = mL.get_amplitude(E, np.sin(np.deg2rad(theta)))[0:2]
plt.plot(E * 1e-3, abs(rs)**2, '-')

plt.subplot(122)
E *= 2
rs, rp = mL.get_amplitude(E, np.sin(np.deg2rad(theta)))[0:2]
plt.plot(E * 1e-3, abs(rs)**2, '-')
예제 #25
0
파일: BalderDMM.py 프로젝트: silexanaej/xrt
import math
import numpy as np
import os, sys
sys.path.append(os.path.join('..', '..', '..'))  # analysis:ignore
import xrt.backends.raycing as raycing
import xrt.backends.raycing.sources as rs
import xrt.backends.raycing.apertures as ra
import xrt.backends.raycing.oes as roe
import xrt.backends.raycing.run as rr
import xrt.backends.raycing.materials as rm
import xrt.backends.raycing.screens as rsc

showIn3D = False

stripeSi = rm.Material('Si', rho=2.33)
stripeSiO2 = rm.Material(('Si', 'O'), quantities=(1, 2), rho=2.2)
stripeIr = rm.Material('Ir', rho=22.42)
mSi = rm.Material('Si', rho=2.33)
mW = rm.Material('W', rho=19.3)
mL = rm.Multilayer(mSi, 27, mW, 18, 40, mSi)


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
예제 #26
0
def build_beamline(nrays=raycing.nrays, eMinRays=550, eMaxRays=30550):
    x0, y0 = -30095.04, -30102.65  # straight section center
    xFar, yFar = -59999.67, -198.017
    height = 1400.
    azimuth = np.arctan2(xFar - x0, yFar - y0)

    stripeSi = rm.Material('Si', rho=2.33)
    stripeRh = rm.Material('Rh', rho=12.41)
    stripePt = rm.Material('Pt', rho=21.45)
    si111_1 = rm.CrystalSi(hkl=(1, 1, 1), tK=-171+273.15)
    si311_1 = rm.CrystalSi(hkl=(3, 1, 1), tK=-171+273.15)
    si111_2 = rm.CrystalSi(hkl=(1, 1, 1), tK=-140+273.15)
    si311_2 = rm.CrystalSi(hkl=(3, 1, 1), tK=-140+273.15)
    filterDiamond = rm.Material('C', rho=3.52, kind='plate')
    beamLine = raycing.BeamLine(azimuth=azimuth, height=height)
    wigglerToStraightSection = 645.0
    xWiggler = x0 + wigglerToStraightSection * beamLine.sinAzimuth
    yWiggler = y0 + wigglerToStraightSection * beamLine.cosAzimuth

    rs.Wiggler(beamLine, name='MPW80', center=(
        xWiggler, yWiggler, height),
        nrays=nrays, period=80., K=13, n=12, eE=3., eI=0.4,
        eSigmaX=200, eSigmaZ=15, eEpsilonX=4.3, eEpsilonZ=0.043,
        eMin=eMinRays, eMax=eMaxRays,
        xPrimeMax=1.5, zPrimeMax=0.25)
#    rs.GeometricSource(beamLine, 'Source', (xWiggler, yWiggler, height),
#      nrays=nrays, distE='flat', energies=(2000, 25000),
#        polarization='horizontal')

    sampleToStraightSection = 36554.1
    beamLine.xSample = x0 + sampleToStraightSection * beamLine.sinAzimuth
    beamLine.ySample = y0 + sampleToStraightSection * beamLine.cosAzimuth

    beamLine.feFixedMask = ra.RectangularAperture(
        beamLine, 'FEFixedMask', (-36876.69, -23321.01, height),
        ('left', 'right', 'bottom', 'top'), [-8.3, 8.3, -2.35, 2.35])
    beamLine.fePhotonShutter = ra.RectangularAperture(
        beamLine, 'FEPhotonShutter', (-37133.37, -23064.33, height),
        ('left', 'right', 'bottom', 'top'), [-10.5, 10.5, -8.0, 8.0],
        alarmLevel=0.)
    beamLine.feMovableMaskLT = ra.RectangularAperture(
        beamLine, 'FEMovableMaskLT', (-38979.62, -21218.07, height),
        ('left', 'top'), [-10, 3.], alarmLevel=0.5)
    beamLine.feMovableMaskRB = ra.RectangularAperture(
        beamLine, 'FEMovableMaskRB', (-39262.47, -20935.23, height),
        ('right', 'bottom'), [10, -3.], alarmLevel=0.5)

    beamLine.filter1 = roe.Plate(
        beamLine, 'Filter1',
        (-42740.918, -17456.772, height), pitch=np.pi/2,
        limPhysX=(-20., 20.), limPhysY=(-9., 9.),
        surface=('diamond 90 $\mu$m',), material=(filterDiamond,), t=0.09,
        targetOpenCL=targetOpenCL,
        alarmLevel=0.)

    beamLine.fsm1 = rsc.Screen(
        beamLine, 'DiamondFSM1', (-42920.68, -17277.01, height),
        compressX=1./2.44)

    beamLine.vcm = roe.VCM(
        beamLine, 'VCM', [-43819.49, -16378.20, height],
        surface=('Rh', 'Si', 'Pt'), material=(stripeRh, stripeSi, stripePt),
        limPhysX=(-53., 53.), limPhysY=(-655., 655.),
        limOptX=((-47., -15.5, 16.), (-16., 15.5, 47.)),
        limOptY=((-650., -655., -650.), (650., 655., 650.)),
        R=5.0e6,
        jack1=[-43328.05, -16869.64, 973.0732],
        jack2=[-44403.38, -15964.02, 973.0732],
        jack3=[-44233.68, -15794.31, 973.0732],
        tx1=[0.0, -695.], tx2=[0.0, 705.75],
        targetOpenCL=targetOpenCL,
        alarmLevel=0.)
    beamLine.fsm2 = rsc.Screen(
        beamLine, 'NormalFSM2', (-44745.34, -15452.36, height),
        compressX=1./2.44)

    beamLine.dcm = roe.DCMOnTripodWithOneXStage(
        beamLine, 'DCM',
        [-45342.09, -14855.6, 1415.], surface=('Si311', 'Si111'),
        material=(si311_1, si111_1), material2=(si311_2, si111_2),
        limPhysX=((-51.1, 6.1), (-6.1, 51.1)), limPhysY=(-30., 30.),
        cryst2perpTransl=20., cryst2longTransl=95.,
        limPhysX2=((8.6, -48.6), (48.6, -8.6)), limPhysY2=(-90., 90.),
        jack1=[-45052.88, -15079.04, 702.4973],
        jack2=[-44987.82, -14490.02, 702.4973],
        jack3=[-45576.85, -14555.08, 702.4973],
        targetOpenCL=targetOpenCL,
        alarmLevel=0.)
    beamLine.fsm3 = rsc.Screen(
        beamLine, 'DiamondFSM3', (-46625.89, -13571.81, height),
        compressX=1./2.44)

    beamLine.BSBlock = ra.RectangularAperture(
        beamLine, 'BSBlock',
        (-45988.52, -14209.17, height), ('bottom',), (22,), alarmLevel=0.)
    beamLine.slitAfterDCM_LR = ra.RectangularAperture(
        beamLine, 'SlitAfterDCM_LR', (-46095.65, -14102.04, height),
        ('left', 'right'), [-25.0, 25.0], alarmLevel=0.5)
    beamLine.slitAfterDCM_BT = ra.RectangularAperture(
        beamLine, 'SlitAfterDCM_BT', (-46107.67, -14090.02, height),
        ('bottom', 'top'), [27.0, 77.0], alarmLevel=0.5)
    foilsZActuatorOffset = 0
    beamLine.xbpm4foils = ra.SetOfRectangularAperturesOnZActuator(
        beamLine, 'XBPM4foils', (-46137.73, -14059.97, height),
        (u'Cu5µm', u'Al7µm', u'Al0.8µm', 'top-edge'),
        (1344.607 + foilsZActuatorOffset, 1366.607 + foilsZActuatorOffset,
         1388.607 + foilsZActuatorOffset, 1400. + foilsZActuatorOffset),
        (45, 45, 45), (8, 8, 8), alarmLevel=0.)

    beamLine.vfm = roe.DualVFM(
        beamLine, 'VFM', [-47491.364, -12706.324, 1449.53],
        surface=('Rh', 'Pt'), material=(stripeRh, stripePt),
        limPhysX=(-56., 56.), limPhysY=(-714., 714.),
        limOptX=((1., -46.), (46., -4.)),
        limOptY=((-712., -712.), (712., 712.)),
        positionRoll=np.pi, R=5.0e6,
        r1=70., xCylinder1=23.5, hCylinder1=3.7035,
        r2=35.98, xCylinder2=-25.0, hCylinder2=6.9504,
        jack1=[-46987.20, -13210.49, 1272.88],
        jack2=[-48062.53, -12304.87, 1272.88],
        jack3=[-47892.83, -12135.16, 1272.88],
        tx1=[0.0, -713.], tx2=[0.0, 687.75],
        targetOpenCL=targetOpenCL,
        alarmLevel=0.2)
    beamLine.fsm4 = rsc.Screen(
        beamLine, 'DiamondFSM4', (-48350.17, -11847.53, height),
        compressX=1./2.44)

    beamLine.ohPSFront = ra.RectangularAperture(
        beamLine, 'OH-PS-FrontCollimator', (-48592.22, -11605.47, height),
        ('left', 'right', 'bottom', 'top'), (-23., 23., 30.48, 79.92),
        alarmLevel=0.2)
    beamLine.ohPSBack = ra.RectangularAperture(
        beamLine, 'OH-PS-BackCollimator', (-48708.19, -11489.51, height),
        ('left', 'right', 'bottom', 'top'), (-23., 23., 31.1, 81.1),
        alarmLevel=0.)
    beamLine.eh100To40Flange = ra.RoundAperture(
        beamLine, 'eh100To40Flange', [-53420.63, -6777.058, height], 19.,
        alarmLevel=0.)
    eh100To40FlangeToslit = 1159.
    slitX = beamLine.eh100To40Flange.center[0] +\
        eh100To40FlangeToslit * np.sin(azimuth)
    slitY = beamLine.eh100To40Flange.center[1] +\
        eh100To40FlangeToslit * np.cos(azimuth)
    beamLine.slitEH = ra.RectangularAperture(
        beamLine, 'slitEH', (slitX, slitY, height),
        ('left', 'right', 'bottom', 'top'), [-5, 5, -2.5, 2.5], alarmLevel=0.5)
    beamLine.fsmAtSample = rsc.Screen(
        beamLine, 'FocusAtSample',
        (beamLine.xSample, beamLine.ySample, height))

    return beamLine
예제 #27
0
def mono_kwargs(E0,
                dE,
                hkl,
                miscut,
                crystal_pitch_corr=[0, 0, 0, 0],
                withLens=True,
                screens=None):

    FWHM_x = 1000
    FWHM_z = 300

    screens_kwargs = []

    # SOURCE
    d_source = 200
    source_kwargs = {
        'name': 'source',
        'center': [0, -d_source, 0],
        'nrays': 1e5,
        'dx': FWHM_x / 1000 / 2.634,  # mm
        'dz': FWHM_z / 1000 / 2.634,  # mm
        'dxprime': 0.03 / 1e6,  # rad
        'dzprime': 0.03 / 1e6,  # rad
        'distE': 'flat',  # lines, normal, flat
        'energies': [E0 - dE, E0 + dE],
        # 'polarization': 'h'
        'polarization': 'v'
    }
    angle = 0

    # CRYSTAL 0
    Si_kwargs = {
        'hkl': hkl,
        # 'tK': 300 # [K]
        'tK': 120  # [K]
    }
    Si_crystal = rm.CrystalSi(**Si_kwargs)
    Si_tth = 2 * Si_crystal.get_Bragg_angle(E0)

    n = np.array([0, np.cos(angle), np.sin(angle)])
    center = [0, 0, 0]
    crystal0_kwargs = {
        'name': 'crystal0',
        'center': center,
        'pitch': 'auto',
        'positionRoll': 0,
        'material': Si_crystal,
        'alpha': 0
    }

    if (screens is None) or ('crystal0' in screens):
        screens_kwargs.append({
            'name': 's_crystal0',
            'center': center,
            'z': get_perpendicular_vector(n)
        })

    angle = angle + (Si_tth - 2 * Si_crystal.get_dtheta(E0, 0) +
                     crystal_pitch_corr[0])

    # CRYSTAL 1
    center = crystal0_kwargs['center'] + \
        np.array([0, np.cos(angle), np.sin(angle)])*200
    crystal1_kwargs = {
        'name': 'crystal1',
        'center': center,
        'pitch': 'auto',
        'positionRoll': np.pi,
        'material': Si_crystal,
        'alpha': miscut
    }

    if (screens is None) or ('crystal1' in screens):
        screens_kwargs.append({
            'name': 's_crystal1',
            'center': center,
            'z': get_perpendicular_vector(n)
        })

    angle = angle - (Si_tth - 2 * Si_crystal.get_dtheta(E0, miscut) +
                     crystal_pitch_corr[1])

    # CRL 1
    mBeryllium = rm.Material('Be', rho=1.848, kind='lens')
    q = 10000  # mm
    zmax = 0.2
    n = np.array([0, np.cos(angle), np.sin(angle)])
    center = crystal1_kwargs['center'] + n * q
    crl1_kwargs = {
        'name': 'crl1',
        'center': center,
        'material': mBeryllium,
        'zmax': zmax,
        'nCRL': (q, E0),
    }

    if (screens is None) or ('crl1' in screens):
        screens_kwargs.append({
            'name': 's_crl1',
            'center': center,
            'z': get_perpendicular_vector(n)
        })

    angle = angle + 0

    # SLITS
    n = np.array([0, np.cos(angle), np.sin(angle)])
    center = crl1_kwargs['center'] + n * q
    slit_kwargs = {
        'name': 'slits',
        'center': center,
        'kind': ['left', 'right', 'bottom', 'top'],
        # 'opening': [-5, 5, -.0035, .0035]
        'opening': [-5, 5, -5, 5]
    }

    if (screens is None) or ('slits' in screens):
        screens_kwargs.append({
            'name': 's_slits',
            'center': center,
            'z': get_perpendicular_vector(n)
        })

    angle = angle + 0

    # CRL 2
    n = np.array([0, np.cos(angle), np.sin(angle)])
    center = slit_kwargs['center'] + n * q
    crl2_kwargs = {
        'name': 'crl2',
        'center': center,
        'material': mBeryllium,
        'zmax': zmax,
        'nCRL': (q, E0),
    }

    if (screens is None) or ('crl2' in screens):
        screens_kwargs.append({
            'name': 's_crl2',
            'center': center,
            'z': get_perpendicular_vector(n)
        })

    angle = angle + 0

    # CRYSTAL 2
    n = np.array([0, np.cos(angle), np.sin(angle)])
    center = crl2_kwargs['center'] + n * (q - 200)
    crystal2_kwargs = {
        'name': 'crystal2',
        'center': center,
        'pitch': 'auto',
        'positionRoll': np.pi,
        'material': Si_crystal,
        'alpha': 0
    }

    if (screens is None) or ('crystal2' in screens):
        screens_kwargs.append({
            'name': 's_crystal2',
            'center': center,
            'z': get_perpendicular_vector(n)
        })

    angle = angle - (Si_tth - 2 * Si_crystal.get_dtheta(E0, 0) +
                     crystal_pitch_corr[2])

    # CRYSTAL 3
    n = np.array([0, np.cos(angle), np.sin(angle)])
    center = crystal2_kwargs['center'] + n * 200
    crystal3_kwargs = {
        'name': 'crystal3',
        'center': center,
        'pitch': 'auto',
        'positionRoll': 0,
        'material': Si_crystal,
        'alpha': -miscut
    }

    if (screens is None) or ('crystal3' in screens):
        screens_kwargs.append({
            'name': 's_crystal3',
            'center': center,
            'z': get_perpendicular_vector(n)
        })

    angle = angle + (Si_tth - 2 * Si_crystal.get_dtheta(E0, -miscut) +
                     crystal_pitch_corr[3])

    # DETECTOR
    n = np.array([0, np.cos(angle), np.sin(angle)])
    center = crystal3_kwargs['center'] + n * 300
    screens_kwargs.append({
        'name': 'detector',
        'center': center,
        'z': get_perpendicular_vector(n)
    })

    if withLens is True:
        oes_kwargs = [source_kwargs, crystal0_kwargs, crystal1_kwargs, crl1_kwargs, \
            slit_kwargs, crl2_kwargs, crystal2_kwargs, crystal3_kwargs]
    else:
        oes_kwargs = [source_kwargs, crystal0_kwargs, crystal1_kwargs, \
            slit_kwargs, crystal2_kwargs, crystal3_kwargs]
        screens_kwargs.pop(2)
        screens_kwargs.pop(3)

    return oes_kwargs, screens_kwargs
예제 #28
0
import numpy as np
import itertools

import xrt.runner as xrtr
import xrt.backends.raycing.screens as rsc
import xrt.plotter as xrtp
import xrt.backends.raycing.run as rr
import xrt.backends.raycing.materials as rm
import xrt.backends.raycing as raycing

from lenses import polycapillary as pl
from utils import beam as ub

# Constant materials FIXME - wrap this up
mGold   = rm.Material('Au', rho=19.3)
mGlass  = rm.Material(('Si', 'O'), quantities=(1, 2), rho=2.2)

class StraightCapillaryTest(object):
    """ Implement shining through a single pipe-like object """
    def __init__(self):
        """ Tania przestrzen reklamowa """
        # This is neccessary
        self.beamLine = raycing.BeamLine()
        self.beamTotal = None

        # This is supposed to be an atomic iterator
        self.beam_iterator = itertools.count()
        # Process that many photons in one raytraycing_run
        self.beam_chunk_size = 1000
예제 #29
0
파일: Softi_CXIw1D.py 프로젝트: wholden/xrt
sys.path.append(os.path.join('..', '..', '..'))  # analysis:ignore
import numpy as np
import pickle

import xrt.backends.raycing as raycing
import xrt.backends.raycing.sources as rs
import xrt.backends.raycing.apertures as ra
import xrt.backends.raycing.oes as roe
import xrt.backends.raycing.run as rr
import xrt.backends.raycing.materials as rm
import xrt.plotter as xrtp
import xrt.runner as xrtr
import xrt.backends.raycing.screens as rsc
#import xrt.backends.raycing.waves as rw

mRhodium = rm.Material('Rh', rho=12.41)
mRhodiumGrating = rm.Material('Rh', rho=12.41, kind='grating')
mGolden = rm.Material('Au', rho=19.32)
mGoldenGrating = rm.Material('Au', rho=19.32, kind='grating')

acceptanceHor = 2.2e-4  # FE acceptance, full angle, mrad
acceptanceVer = 4.2e-4  # FE acceptance

pFE = 19250.
pM1 = 24000.
pPG = 2000.
pM3 = 2800.  # distance to PG
qM3mer = 12000.
qM3sag = 12000.
dM4ES = 2200.
dM45 = 3200.
예제 #30
0
파일: calc_slab.py 프로젝트: wholden/xrt
# -*- coding: utf-8 -*-
__author__ = "Konstantin Klementiev, Roman Chernikov"
__date__ = "22 Jan 2016"
import numpy as np
import matplotlib.pyplot as plt
# path to xrt:
import os, sys
sys.path.append(os.path.join('..', '..', '..'))  # analysis:ignore
import xrt.backends.raycing.materials as rm

layerW = rm.Material('W', kind='thin mirror', rho=19.3, t=2.5e-6)

E = 10000
theta = np.linspace(0, 10, 501)  # degrees
rs, rp = layerW.get_amplitude(E, np.sin(np.deg2rad(theta)))[0:2]

plt.semilogy(theta, abs(rs)**2, 'r', theta, abs(rp)**2, 'b')
plt.show()