def test_radius_indexes_1d(self): uc = UnitCell(numpy.identity(3, float), numpy.array([True, False, False])) indexes = uc.get_radius_indexes(0.5) expected_indexes = numpy.array([ [-1, 0, 0], [ 0, 0, 0], [ 1, 0, 0], ]) self.assertArraysEqual(indexes, expected_indexes) uc = UnitCell(numpy.identity(3, float), numpy.array([True, False, False])) indexes = uc.get_radius_indexes(1.8, numpy.array([4,-1,-1])) expected_indexes = numpy.array([ [-2, 0, 0], [-1, 0, 0], [ 0, 0, 0], [ 1, 0, 0], ]) self.assertArraysEqual(indexes, expected_indexes)
def test_radius_indexes_2d_graphical(self): #uc = UnitCell(numpy.array([ # [2.0, 1.0, 0.0], # [0.0, 0.2, 0.0], # [0.0, 0.0, 10.0], #])) #radius = 0.8 uc = UnitCell(numpy.array([ [1.0, 1.0, 0.0], [0.0, 1.0, 0.0], [0.0, 0.0, 10.0], ])) radius = 5.3 #uc = UnitCell(numpy.array([ # [1.0, 1.0, 0.0], # [0.0, 1.0, 0.0], # [0.0, 0.0, 1.0], #])) #radius = 0.9 fracs = numpy.arange(-0.5, 0.55, 0.1) import pylab from matplotlib.patches import Circle, Polygon from matplotlib.lines import Line2D pylab.clf() for i0 in fracs: for i1 in fracs: center = uc.to_cartesian([i0,i1,0.0]) pylab.gca().add_artist(Circle((center[0], center[1]), radius, fill=True, fc='#7777AA', ec='none')) pylab.gca().add_artist(Circle((0, 0), radius, fill=True, fc='#0000AA', ec='none')) ranges = uc.get_radius_ranges(radius) indexes = uc.get_radius_indexes(radius) for i in xrange(-ranges[0]-1, ranges[0]+1): start = uc.to_cartesian([i+0.5, -ranges[1]-0.5, 0]) end = uc.to_cartesian([i+0.5, ranges[1]+0.5, 0]) pylab.gca().add_artist(Line2D([start[0], end[0]], [start[1], end[1]], color="k", linewidth=1)) for i in xrange(-ranges[1]-1, ranges[1]+1): start = uc.to_cartesian([-ranges[0]-0.5, i+0.5, 0]) end = uc.to_cartesian([ranges[0]+0.5, i+0.5, 0]) pylab.gca().add_artist(Line2D([start[0], end[0]], [start[1], end[1]], color="k", linewidth=1)) for i in xrange(-ranges[0], ranges[0]+1): start = uc.to_cartesian([i, -ranges[1]-0.5, 0]) end = uc.to_cartesian([i, ranges[1]+0.5, 0]) pylab.gca().add_artist(Line2D([start[0], end[0]], [start[1], end[1]], color="k", linewidth=0.5, linestyle="--")) for i in xrange(-ranges[1], ranges[1]+1): start = uc.to_cartesian([-ranges[0]-0.5, i, 0]) end = uc.to_cartesian([ranges[0]+0.5, i, 0]) pylab.gca().add_artist(Line2D([start[0], end[0]], [start[1], end[1]], color="k", linewidth=0.5, linestyle="--")) for i0,i1,i2 in indexes: if i2 != 0: continue corners = uc.to_cartesian(numpy.array([ [i0-0.5, i1-0.5, 0.0], [i0-0.5, i1+0.5, 0.0], [i0+0.5, i1+0.5, 0.0], [i0+0.5, i1-0.5, 0.0], ])) pylab.gca().add_artist(Polygon(corners[:,:2], fill=True, ec='none', fc='r', alpha=0.5)) corners = uc.to_cartesian(numpy.array([ [-ranges[0]-0.5, -ranges[1]-0.5, 0.0], [-ranges[0]-0.5, +ranges[1]+0.5, 0.0], [+ranges[0]+0.5, +ranges[1]+0.5, 0.0], [+ranges[0]+0.5, -ranges[1]-0.5, 0.0], ])) pylab.xlim(1.1*corners[:,:2].min(), 1.1*corners[:,:2].max()) pylab.ylim(1.1*corners[:,:2].min(), 1.1*corners[:,:2].max()) #pylab.xlim(-1.5*radius, 1.5*radius) #pylab.ylim(-1.5*radius, 1.5*radius) pylab.savefig("output/radius_indexes_2d.png")