def tst_indexing(self): from dials.algorithms.profile_model.modeller import CircleSampler from math import sin, cos, pi width = 1000 height = 1000 scan_range = (2, 12) depth = scan_range[1] - scan_range[0] nz = 2 sampler = CircleSampler((width, height), scan_range, nz) zstep = depth / nz eps = 1e-10 dt = 2 * pi / 8 r2 = sampler.r2() xp = [width / 2.0] + [width / 2.0 + r2 * cos(i * dt) for i in range(8)] yp = [height / 2.0] + [height / 2.0 + r2 * sin(i * dt) for i in range(8)] zind = [[k] * 9 for k in range(nz)] zind = [i for j in zind for i in j] zp = [(z + 0.5) * zstep + scan_range[0] for z in zind] for x0, y0, z0, i in zip(xp, yp, zp, range(len(sampler))): x1, y1, z1 = sampler.coord(i) assert(abs(x0 - x1) <= eps) assert(abs(y0 - y1) <= eps) assert(abs(z0 - z1) <= eps) print 'OK'
def test_indexing(): from dials.algorithms.profile_model.modeller import CircleSampler width = 1000 height = 1000 scan_range = (2, 12) depth = scan_range[1] - scan_range[0] nz = 2 sampler = CircleSampler((width, height), scan_range, nz) zstep = depth / nz eps = 1e-10 dt = 2 * math.pi / 8 r2 = sampler.r2() xp = [width / 2.0 ] + [width / 2.0 + r2 * math.cos(i * dt) for i in range(8)] yp = [height / 2.0 ] + [height / 2.0 + r2 * math.sin(i * dt) for i in range(8)] zind = [[k] * 9 for k in range(nz)] zind = [i for j in zind for i in j] zp = [(z + 0.5) * zstep + scan_range[0] for z in zind] for x0, y0, z0, i in zip(xp, yp, zp, range(len(sampler))): x1, y1, z1 = sampler.coord(i) assert (abs(x0 - x1) <= eps) assert (abs(y0 - y1) <= eps) assert (abs(z0 - z1) <= eps)
def tst_weights(self): from dials.algorithms.profile_model.modeller import CircleSampler from math import exp, log from scitbx import matrix width = 1000 height = 1000 scan_range = (2, 12) depth = scan_range[1] - scan_range[0] nz = 1 sampler = CircleSampler((width, height), scan_range, nz) # Check the weight at the coord in 1.0 eps = 1e-7 for i in range(len(sampler)): coord = sampler.coord(i) weight = sampler.weight(i, 0, coord) assert(abs(weight - 1.0) < eps) r0 = sampler.r0() r1 = sampler.r1() r2 = sampler.r2() r = r2 / (2.0*r1) expected = exp(-4.0*r*r*log(2.0)) for i in range(1, 9): coord = sampler.coord(i) weight = sampler.weight(0, 0, coord) assert(abs(weight - expected) < eps) r = r2 / (2.0*(r2 - r1)) expected = exp(-4.0*r*r*log(2.0)) for i in range(1, 9): coord = sampler.coord(0) weight = sampler.weight(i, 0, coord) assert(abs(weight - expected) < eps) for i in range(1, 9): coord1 = matrix.col(sampler.coord(0)) coord2 = matrix.col(sampler.coord(i)) coord = coord1 + r1 * (coord2 - coord1) / r2 weight = sampler.weight(0, 0, coord) assert(abs(weight - 0.5) < eps) weight = sampler.weight(i, 0, coord) assert(abs(weight - 0.5) < eps) print 'OK'
def tst_weights(self): from dials.algorithms.profile_model.modeller import CircleSampler from math import exp, log from scitbx import matrix width = 1000 height = 1000 scan_range = (2, 12) depth = scan_range[1] - scan_range[0] nz = 1 sampler = CircleSampler((width, height), scan_range, nz) # Check the weight at the coord in 1.0 eps = 1e-7 for i in range(len(sampler)): coord = sampler.coord(i) weight = sampler.weight(i, coord) assert (abs(weight - 1.0) < eps) r0 = sampler.r0() r1 = sampler.r1() r2 = sampler.r2() r = r2 / (2.0 * r1) expected = exp(-4.0 * r * r * log(2.0)) for i in range(1, 9): coord = sampler.coord(i) weight = sampler.weight(0, coord) assert (abs(weight - expected) < eps) r = r2 / (2.0 * (r2 - r1)) expected = exp(-4.0 * r * r * log(2.0)) for i in range(1, 9): coord = sampler.coord(0) weight = sampler.weight(i, coord) assert (abs(weight - expected) < eps) for i in range(1, 9): coord1 = matrix.col(sampler.coord(0)) coord2 = matrix.col(sampler.coord(i)) coord = coord1 + r1 * (coord2 - coord1) / r2 weight = sampler.weight(0, coord) assert (abs(weight - 0.5) < eps) weight = sampler.weight(i, coord) assert (abs(weight - 0.5) < eps) print 'OK'
def test_weights(): from scitbx import matrix from dials.algorithms.profile_model.modeller import CircleSampler width = 1000 height = 1000 scan_range = (2, 12) nz = 1 sampler = CircleSampler((width, height), scan_range, nz) # Check the weight at the coord in 1.0 eps = 1e-7 for i in range(len(sampler)): coord = sampler.coord(i) weight = sampler.weight(i, 0, coord) assert abs(weight - 1.0) < eps r1 = sampler.r1() r2 = sampler.r2() r = r2 / (2.0 * r1) expected = math.exp(-4.0 * r * r * math.log(2.0)) for i in range(1, 9): coord = sampler.coord(i) weight = sampler.weight(0, 0, coord) assert abs(weight - expected) < eps r = r2 / (2.0 * (r2 - r1)) expected = math.exp(-4.0 * r * r * math.log(2.0)) for i in range(1, 9): coord = sampler.coord(0) weight = sampler.weight(i, 0, coord) assert abs(weight - expected) < eps for i in range(1, 9): coord1 = matrix.col(sampler.coord(0)) coord2 = matrix.col(sampler.coord(i)) coord = coord1 + r1 * (coord2 - coord1) / r2 weight = sampler.weight(0, 0, coord) assert abs(weight - 0.5) < eps weight = sampler.weight(i, 0, coord) assert abs(weight - 0.5) < eps
def test_self_consistent(): from dials.algorithms.profile_model.modeller import CircleSampler width = 1000 height = 1000 scan_range = (2, 12) depth = scan_range[1] - scan_range[0] nz = 2 sampler = CircleSampler((width, height), scan_range, nz) for i in range(len(sampler)): coord = sampler.coord(i) index = sampler.nearest(0, coord) assert index == i
def tst_self_consistent(self): from dials.algorithms.profile_model.modeller import CircleSampler width = 1000 height = 1000 scan_range = (2, 12) depth = scan_range[1] - scan_range[0] nz = 2 sampler = CircleSampler((width, height), scan_range, nz) for i in range(len(sampler)): coord = sampler.coord(i) index = sampler.nearest(0, coord) assert(index == i) print 'OK'