Dear Hossein,

You can do that easily with "del":
import random
Sites=syst.finalized().sites
To_delete=random.sample(Sites, 23) # choose 23 sites to delete
del syst[To_delete]
kwant.plot(syst)


I hope this helps,
Adel

On Tue, Jun 20, 2023 at 3:47 PM Hossein Karbaschi <h.karbas...@gmail.com>
wrote:

> Hi everybody,
>
> In the following code I want to delete few random sites from the
> scattering region.
> Please help me in this case.
> Best regards,
> Hossein
>
> import kwant
> from math import sqrt
> import matplotlib.pyplot as plt
> import tinyarray
> import numpy as np
> import math
>
>
> import matplotlib
>
>
> #Constants.........................................................
>
> #Parameter.........................................................
> a0=2.617*sqrt(3);
> d0=2.617;
> dz0=1.59047;
> D0=sqrt((d0)**2+(dz0)**2);
>
> #st=0;
> st=-0.0;
> dz=1.59047+st;
> d=-0.3*dz+3.09;
> a1=-0.3*sqrt(3)*dz+5.35;
> D=sqrt((d)**2+(dz)**2);
>
> scale=(D/D0)**(-8);
> qo=[];
> N=dz/D;
> delta1=0j;
> delta2=0;
> R=(2*a1)**2;
> #on-site energy...................................................
> Es=-10.906;
> Ep=-0.486;
>
> Ep1=-0.486;
> Ep2=-0.486;
>
> #nearest neighbor................................................
> sssigma=-0.608*scale;
> spsigma=1.32*scale;
> ppsigma=1.854*scale;
> pppay=-0.6*scale;
>
> #next nearest neighbor.........................................
> ppsigma2=0.156*scale;
> pppay2=0;
> sssigma2=0;
> spsigma2=0;
>
> #onsite potentials ...........................................
> pot_a=10;
> pot_b=0;
> #nearest
> neighbors.............................................................
> l1=(math.cos(math.pi/6))*(d/D);
> m1=(math.sin(math.pi/6))*(d/D);
> N1=dz/D;
>
> #second
> neighbors..............................................................
> l2=(math.cos(math.pi/3))
> m2=(math.sin(math.pi/3))
>
> latt = kwant.lattice.general([(a1,0),(a1*0.5,a1*math.sqrt(3)/2)],
>                              [(a1/2,-d/2),(a1/2,d/2)])
>
>
> a,b = latt.sublattices
> syst= kwant.Builder()
>
> # Onsite matrice energt
> Onsite_a=tinyarray.array([[Es,0,0,0],[0,Ep,delta1,0],[0,-delta1,Ep,0],
>                           [0,0,0,Ep1]])
>
> Onsite_b=tinyarray.array([[Es,0,0,0],[0,Ep,delta1,0],[0,-delta1,Ep,0],
>                           [0,0,0,Ep2]])
>
>
> pot_edge_a=tinyarray.array([[Es+pot_a,0,0,0],[0,Ep+pot_a,delta1,0],[0,-delta1,Ep+pot_a,0],
>                           [0,0,0,Ep1+pot_a]])
>
>
> pot_edge_b=tinyarray.array([[Es+pot_b,0,0,0],[0,Ep+pot_b,delta1,0],[0,-delta1,Ep+pot_b,0],
>                           [0,0,0,Ep2+pot_b]])
> #nearest
> neighbors.............................................................
> first_up=tinyarray.array([[sssigma, l1*spsigma,m1*spsigma,N1*spsigma],
>                           [-l1*spsigma,
> l1**2*ppsigma+(1-l1**2)*pppay,l1*m1*(ppsigma-pppay),l1*N1*(ppsigma-pppay)],
>                           [-m1*spsigma ,l1*m1*(ppsigma-pppay),
> m1**2*ppsigma+(1-m1**2)*pppay,N1*m1*(ppsigma-pppay)],
>
> [-N1*spsigma,l1*N1*(ppsigma-pppay),N1*m1*(ppsigma-pppay),N1**2*ppsigma+(1-N1**2)*pppay]])
>
> first_left_up=tinyarray.array([[sssigma,-l1*spsigma,m1*spsigma,N1*spsigma],
>                           [l1*spsigma, l1**2*ppsigma+(1-l1**2)*pppay,-
> l1*m1*(ppsigma-pppay),-l1*N1*(ppsigma-pppay)],
>                           [-m1*spsigma ,-l1*m1*(ppsigma-pppay),
> m1**2*ppsigma+(1-m1**2)*pppay,N1*m1*(ppsigma-pppay)],
>
> [-N1*spsigma,-l1*N1*(ppsigma-pppay),N1*m1*(ppsigma-pppay),N1**2*ppsigma+(1-N1**2)*pppay]])
>
> first=tinyarray.array([[sssigma,0,-(d/D)*spsigma,N1*spsigma],
>                           [0,pppay,0,0],
>                           [(d/D)*spsigma ,0,
> (d/D)**2*ppsigma+(1-(d/D)**2)*pppay,-N1*(d/D)*(ppsigma-pppay)],
>
> [-N1*spsigma,0,-N1*(d/D)*(ppsigma-pppay),N1**2*ppsigma+(1-N1**2)*pppay]])
> #second
> neighbors..............................................................
> second_up=tinyarray.array([[sssigma2,l2*spsigma2,m2*spsigma2,0],
>
> [-l2*spsigma2,l2**2*ppsigma2+(1-l2**2)*pppay2,l2*m2*(ppsigma2-pppay2),0],
>                           [-m2*spsigma2
> ,l2*m2*(ppsigma2-pppay2),m2**2*ppsigma2+(1-m2**2)*pppay2,0],
>                           [0,0,0,pppay2]])
>
> second_left_up=tinyarray.array([[sssigma2,-l2*spsigma2,m2*spsigma2,0],
>
> [l2*spsigma2,l2**2*ppsigma2+(1-l2**2)*pppay2,-l2*m2*(ppsigma2-pppay2),0],
>                           [-m2*spsigma2
> ,-l2*m2*(ppsigma2-pppay2),m2**2*ppsigma2+(1-m2**2)*pppay2,0],
>                           [0,0,0,pppay2]])
>
> second_right_down=tinyarray.array([[sssigma2,l2*spsigma2,-m2*spsigma2,0],
>
> [-l2*spsigma2,l2**2*ppsigma2+(1-l2**2)*pppay2,-l2*m2*(ppsigma2-pppay2),0],
>
> [m2*spsigma2,-l2*m2*(ppsigma2-pppay2),m2**2*ppsigma2+(1-m2**2)*pppay2,0],
>                           [0,0,0,pppay2]])
>
> second_down=tinyarray.array([[sssigma2,-l2*spsigma2,-m2*spsigma2,0],
>
> [l2*spsigma2,l2**2*ppsigma2+(1-l2**2)*pppay2,l2*m2*(ppsigma2-pppay2),0],
>                           [m2*spsigma2
> ,l2*m2*(ppsigma2-pppay2),m2**2*ppsigma2+(1-m2**2)*pppay2,0],
>                           [0,0,0,pppay2]])
>
> second_right=tinyarray.array([[sssigma2,spsigma2,0,0],
> [-spsigma2,ppsigma2,0,0],[0 ,0,pppay2,0],
>                           [0,0,0,pppay2]])
>
> second_left=tinyarray.array([[sssigma2,-spsigma2,0,0],
> [spsigma2,ppsigma2,0,0],[0 ,0,pppay2,0],
>                           [0,0,0,pppay2]])
>
>
> #...................................................................................
> def rectangle(pos):
>     x, y = pos
> #    z=x**2+y**2
>     return -9.2*a1<x<9.2*a1 and -12*d<=y<12*d
>
>
>
> syst[a.shape(rectangle, (1,1))] = Onsite_a
> syst[b.shape(rectangle, (1,1))] = Onsite_b
>
>
> #nearest
> neighbors.............................................................
> syst[[kwant.builder.HoppingKind((0,0),a,b)]] = first
> syst[[kwant.builder.HoppingKind((0,1),a,b)]] = first_up
> syst[[kwant.builder.HoppingKind((-1,1),a,b)]] = first_left_up
>
> #second
> neighbors..............................................................
> syst[[kwant.builder.HoppingKind((0,1),a,a)]]=second_up
> syst[[kwant.builder.HoppingKind((-1,1),a,a)]]=second_left_up
> syst[[kwant.builder.HoppingKind((1,-1),a,a)]]=second_right_down
> syst[[kwant.builder.HoppingKind((0,-1),a,a)]]=second_down
> syst[[kwant.builder.HoppingKind((1,0),a,a)]]=second_right
> syst[[kwant.builder.HoppingKind((-1,0),a,a)]]=second_left
>
> syst[[kwant.builder.HoppingKind((0,1),b,b)]]=second_up
> syst[[kwant.builder.HoppingKind((-1,1),b,b)]]=second_left_up
> syst[[kwant.builder.HoppingKind((1,-1),b,b)]]=second_right_down
> syst[[kwant.builder.HoppingKind((0,-1),b,b)]]=second_down
> syst[[kwant.builder.HoppingKind((1,0),b,b)]]=second_right
> syst[[kwant.builder.HoppingKind((-1,0),b,b)]]=second_left
>
>
>
> sym = kwant.TranslationalSymmetry(latt.vec((1,0)))
>
> sym.add_site_family(latt.sublattices[0], other_vectors=[(-1, 2)])
> sym.add_site_family(latt.sublattices[1], other_vectors=[(-1, 2)])
> lead = kwant.Builder(sym)
>
>
> # ---- random impurity
>
>
>
>
> # --- leads
> def lead_shape(pos):
>     x, y = pos
>     return   -12*d<=y<12*d and -5.2*a1<x<5.2*a1
>
> lead[a.shape(lead_shape, (1,1))] = Onsite_a
> lead[b.shape(lead_shape, (1,1))] = Onsite_b
>
> lead[[kwant.builder.HoppingKind((0,0),a,b)]] =first
> lead[[kwant.builder.HoppingKind((0,1),a,b)]] =first_up
> lead[[kwant.builder.HoppingKind((-1,1),a,b)]] =first_left_up
>
> lead[[kwant.builder.HoppingKind((0,1),a,a)]]=second_up
> lead[[kwant.builder.HoppingKind((-1,1),a,a)]]=second_left_up
> lead[[kwant.builder.HoppingKind((1,-1),a,a)]]=second_right_down
> lead[[kwant.builder.HoppingKind((0,-1),a,a)]]=second_down
> lead[[kwant.builder.HoppingKind((1,0),a,a)]]=second_right
> lead[[kwant.builder.HoppingKind((-1,0),a,a)]]=second_left
>
> lead[[kwant.builder.HoppingKind((0,1),b,b)]]=second_up
> lead[[kwant.builder.HoppingKind((-1,1),b,b)]]=second_left_up
> lead[[kwant.builder.HoppingKind((1,-1),b,b)]]=second_right_down
> lead[[kwant.builder.HoppingKind((0,-1),b,b)]]=second_down
> lead[[kwant.builder.HoppingKind((1,0),b,b)]]=second_right
> lead[[kwant.builder.HoppingKind((-1,0),b,b)]]=second_left
>
> syst.attach_lead(lead,add_cells=0)
>
>
> syst.attach_lead(lead.reversed(),add_cells=0)
> fsys = syst.finalized()
>
>
>
> def family_color(site):
> #print(sys[site])
>     if syst[site]==Onsite_a:
>         return 'black'
>     elif syst[site]==Onsite_b:
>         return 'green'
>     elif syst[site]==pot_edge_a:
>         return 'yellow'
>     else:
>         return 'blue'
>
> ax=kwant.plot(syst,site_color=family_color);
> ax.savefig('syst.pdf')
>


-- 
Abbout Adel

Reply via email to