Beispiel #1
0
    def _TDS(self, nz, iZs, iZv, opts, v):
        pattern = np.vstack([
            self.pattern + np.array([self.ax * i, 0, 0])
            for i in range(self.Nx)
        ])
        wobbles = self.wobble[np.array(pattern[:, -1], dtype=int)][:, None]
        pattern0 = pattern
        Na = pattern0.shape[0]
        self.patterns = []
        for iTDS in range(self.nTDS):
            print(colors.yellow + 'configuration %d' % iTDS + colors.black)
            pattern[:, :2] = pattern0[:, :2] + (
                2 * np.random.rand(Na, 2) - 1) * wobbles  #*[self.ax,self.bz]
            self.patterns += [pattern.copy()]
            p1 = pg.Wallpaper('p1',
                              self.Nx * self.ax,
                              self.bz,
                              90,
                              pattern,
                              ndeg=self.nx,
                              gen=True)
            self.pattern = p1.get_potential_grid_p1()

            if v:
                print(colors.blue + '...integrating projected potential...' +
                      colors.black)
            self._set_transmission_function()
            self._set_propagator()
            self.set_Psi0(iTDS)
            self.propagate(nz, iZs, iZv, opts, iTDS, v)
        self.psi_qz = np.abs(self.psi_qz)**2
        self.pattern = pattern0
def test_pattern_potential():
    pattern = np.array([[0.25, 0.25, 2], [0.5, 0.5, 3]])
    crystal = pg.Wallpaper('p2',
                           a,
                           pattern=pattern,
                           gen=True,
                           ndeg=npts,
                           nh=1,
                           nk=1,
                           pOpt='AVp')
    x, f = crystal.get_potential_unit_cell()
Beispiel #3
0
plt.close('all')
path = '../../multislice/docs_fig/multi2D/NBkinvsMS'
opts = 'I'

# Problem
keV = 200  # wavelength 200keV
Nx = 10  # Number of transverse unit cells
Nz = 20  #
ndeg = 2**8  # number of pixels
pptype, ax, bz, angle, Za = 'p1', 5, 10, 90, 2
pattern = np.array([[2.5, 5, Za]])
eps = 0.1
opt = 'p'

### Structure definition
p1 = pg.Wallpaper(pptype, ax, bz, angle, pattern, ndeg=ndeg)
potential = p1.get_potential_grid()

### Run multislice
ms0 = ms.Multi2D(potential,
                 ax,
                 bz,
                 keV=keV,
                 Nx=1,
                 nz=Nz,
                 dz=bz,
                 eps=eps,
                 iZs=1,
                 iZv=1)
dq = ms0.q[1] - ms0.q[0]
# Ims = ms0.psi_qz[-1,:].copy()/(ms0.nx**2*ms0.dq**2)
Beispiel #4
0
nx = 1
# p1 = pg.Wallpaper(pp_type='p1',a=ax,b=bz,angle=90,pattern=pattern,ndeg=0,nh=nx,nk=1)
# apply_padding(p1,npad=0,nx=nx,name='pad0_nx1',opt='p')
# apply_padding(p1,npad=1,nx=nx,name='pad1_nx1',opt='p')
# apply_padding(p1,npad=2,nx=nx,name='pad2_nx1',opt='p')
# apply_padding(p1,npad=5,nx=nx,name='pad3_nx1',opt='p')

# nx=2
# p1 = pg.Wallpaper(pp_type='p1',a=ax,b=bz,angle=90,pattern=pattern,ndeg=0,nh=2,nk=1)
# apply_padding(p1,npad=0 ,nx=nx,name='pad0_nx2',opt='sp')
# apply_padding(p1,npad=5 ,nx=nx,name='pad1_nx2',opt='sp')
# apply_padding(p1,npad=10,nx=nx,name='pad2_nx2',opt='sp')
# apply_padding(p1,npad=20,nx=nx,name='pad3_nx2',opt='sp')

npad = 20
# p1a = pg.Wallpaper(pp_type='p1',a=ax,b=bz,angle=90,pattern=pattern,ndeg=0,nh=1,nk=1)
# p1b = pg.Wallpaper(pp_type='p1',a=ax,b=bz,angle=90,pattern=pattern,ndeg=0,nh=2,nk=1)
# p1c = pg.Wallpaper(pp_type='p1',a=ax,b=bz,angle=90,pattern=pattern,ndeg=0,nh=5,nk=1)
p1d = pg.Wallpaper(pp_type='p1',
                   a=ax,
                   b=bz,
                   angle=90,
                   pattern=pattern,
                   ndeg=0,
                   nh=10,
                   nk=1)
# msa = apply_padding(p1a,npad=npad,nx=1 ,name='padnx1',opt='p')
# msb = apply_padding(p1b,npad=npad,nx=2 ,name='padnx2',opt='p')
# msc = apply_padding(p1c,npad=npad,nx=5 ,name='padnx3',opt='p')
msd = apply_padding(p1d, npad=npad, nx=10, name='padnx4', opt='p')
Beispiel #5
0
mp.Za_show()
mp.Qz_show(iZs=[-1], title='with TDS', xylims=['x', -2, 2])

# mp.Bz_show(iBs=np.arange(0,4),sym_opt=1,lw=2)

if '0' in opts:
    # mp = MS2D.Multi2D(pattern,ax,bz,keV=keV,
    #         Nx=Nx,dz=2,nz=10,eps=0.25,nx=ndeg,
    #         TDS=True,nTDS=1,wobble=np.array([0.002,0.025,0.025,0.025,0.05])*0, #[0.01,1:0.025,2:0.025,4:0.05},
    #         ppopt='',opts='q',v=1)

    p1 = pg.Wallpaper('p1',
                      ax,
                      bz,
                      90,
                      pattern,
                      ndeg=ndeg,
                      gen=True,
                      nh=3,
                      nk=3)
    # p1.plot_unit_cells(opts='AV',nh=2,nk=2)
    potential = p1.get_potential_grid_p1()
    #
    # # Loop over 1 unit cell periodic
    mp = MS2D.Multi2D(potential,
                      ax,
                      bz,
                      keV=keV,
                      Nx=Nx,
                      dz=2,
                      nz=10,