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()
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)
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')
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,