Exemplo n.º 1
0
    def tst_nearest_n(self):
        from random import uniform
        from dials.algorithms.profile_model.modeller import SingleSampler
        from math import floor
        width = 1000
        height = 1000
        scan_range = (2, 12)
        depth = scan_range[1] - scan_range[0]
        nz = 2
        sampler = SingleSampler(scan_range, nz)

        for i in range(1000):
            x = uniform(0, 1000)
            y = uniform(0, 1000)
            z = uniform(*scan_range)
            k = int(floor((z - scan_range[0]) * nz / depth))
            if k >= nz:
                k = nz - 1
            index0 = k
            index1 = sampler.nearest_n(0, (x, y, z))
            assert (len(set(index1)) == len(index1))
            assert (index0 == index1[-1])
            for ind in index1:
                assert (abs(ind - k) <= 1)

        print 'OK'
Exemplo n.º 2
0
  def tst_nearest_n(self):
    from random import uniform
    from dials.algorithms.profile_model.modeller import SingleSampler
    from math import floor
    width = 1000
    height = 1000
    scan_range = (2, 12)
    depth = scan_range[1] - scan_range[0]
    nz = 2
    sampler = SingleSampler(scan_range, nz)

    for i in range(1000):
      x = uniform(0, 1000)
      y = uniform(0, 1000)
      z = uniform(*scan_range)
      k = int(floor((z-scan_range[0]) * nz / depth))
      if k >= nz:
        k = nz - 1
      index0 = k
      index1 = sampler.nearest_n((x, y, z))
      assert(len(set(index1)) == len(index1))
      assert(index0 == index1[-1])
      for ind in index1:
        assert(abs(ind - k) <= 1)

    print 'OK'
Exemplo n.º 3
0
def test_pickle():
    from dials.algorithms.profile_model.modeller import SingleSampler

    scan_range = (2, 12)
    nz = 2
    sampler = SingleSampler(scan_range, nz)
    sampler2 = pickle.loads(pickle.dumps(sampler))
    assert sampler.grid_size() == sampler2.grid_size()
Exemplo n.º 4
0
def test_self_consistent():
    from dials.algorithms.profile_model.modeller import SingleSampler

    scan_range = (2, 12)
    nz = 2
    sampler = SingleSampler(scan_range, nz)

    for i in range(len(sampler)):
        coord = sampler.coord(i)
        index = sampler.nearest(0, coord)
        assert index == i
Exemplo n.º 5
0
def test_pickle():
    from dials.algorithms.profile_model.modeller import SingleSampler
    import six.moves.cPickle as pickle
    width = 1000
    height = 1000
    scan_range = (2, 12)
    depth = scan_range[1] - scan_range[0]
    nz = 2
    sampler = SingleSampler(scan_range, nz)
    sampler2 = pickle.loads(pickle.dumps(sampler))
    assert sampler.grid_size() == sampler2.grid_size()
Exemplo n.º 6
0
def test_self_consistent():
    from dials.algorithms.profile_model.modeller import SingleSampler
    width = 1000
    height = 1000
    scan_range = (2, 12)
    depth = scan_range[1] - scan_range[0]
    nz = 2
    sampler = SingleSampler(scan_range, nz)

    for i in range(len(sampler)):
        coord = sampler.coord(i)
        index = sampler.nearest(0, coord)
        assert (index == i)
Exemplo n.º 7
0
  def tst_self_consistent(self):
    from dials.algorithms.profile_model.modeller import SingleSampler
    width = 1000
    height = 1000
    scan_range = (2, 12)
    depth = scan_range[1] - scan_range[0]
    nz = 2
    sampler = SingleSampler(scan_range, nz)

    for i in range(len(sampler)):
      coord = sampler.coord(i)
      index = sampler.nearest(coord)
      assert(index == i)

    print 'OK'
Exemplo n.º 8
0
def test_getters():
    from dials.algorithms.profile_model.modeller import SingleSampler

    scan_range = (2, 12)
    depth = scan_range[1] - scan_range[0]
    nz = 2
    sampler = SingleSampler(scan_range, nz)
    scan_range = sampler.scan_range()
    grid_size = sampler.grid_size()
    step_size = sampler.step_size()
    size = len(sampler)

    assert scan_range[0] == scan_range[0]
    assert scan_range[1] == scan_range[1]
    assert nz == grid_size
    assert step_size == depth / nz
    assert nz == size
Exemplo n.º 9
0
def test_nearest():
    from dials.algorithms.profile_model.modeller import SingleSampler

    scan_range = (2, 12)
    depth = scan_range[1] - scan_range[0]
    nz = 2
    sampler = SingleSampler(scan_range, nz)

    for i in range(1000):
        x = random.uniform(0, 1000)
        y = random.uniform(0, 1000)
        z = random.uniform(*scan_range)
        k = int(math.floor((z - scan_range[0]) / (depth / nz)))
        if k >= nz:
            k = nz - 1
        index0 = k
        index1 = sampler.nearest(0, (x, y, z))
        assert index0 == index1
Exemplo n.º 10
0
    def tst_getters(self):
        from dials.algorithms.profile_model.modeller import SingleSampler
        width = 1000
        height = 1000
        scan_range = (2, 12)
        depth = scan_range[1] - scan_range[0]
        nz = 2
        sampler = SingleSampler(scan_range, nz)
        scan_range = sampler.scan_range()
        grid_size = sampler.grid_size()
        step_size = sampler.step_size()
        size = len(sampler)

        assert (scan_range[0] == scan_range[0])
        assert (scan_range[1] == scan_range[1])
        assert (nz == grid_size)
        assert (step_size == depth / nz)
        assert (nz == size)
        print 'OK'
Exemplo n.º 11
0
  def tst_getters(self):
    from dials.algorithms.profile_model.modeller import SingleSampler
    width = 1000
    height = 1000
    scan_range = (2, 12)
    depth = scan_range[1] - scan_range[0]
    nz = 2
    sampler = SingleSampler(scan_range, nz)
    scan_range = sampler.scan_range()
    grid_size = sampler.grid_size()
    step_size = sampler.step_size()
    size = len(sampler)

    assert(scan_range[0] == scan_range[0])
    assert(scan_range[1] == scan_range[1])
    assert(nz == grid_size)
    assert(step_size == depth / nz)
    assert(nz == size)
    print 'OK'
Exemplo n.º 12
0
  def tst_pickle(self):
    from dials.algorithms.profile_model.modeller import SingleSampler
    import tempfile
    import cPickle as pickle
    width = 1000
    height = 1000
    scan_range = (2, 12)
    depth = scan_range[1] - scan_range[0]
    nz = 2
    sampler = SingleSampler(scan_range, nz)

    tf = tempfile.TemporaryFile()
    pickle.dump(sampler, tf)
    tf.flush()
    tf.seek(0)
    sampler2 = pickle.load(tf)

    assert(sampler.grid_size() == sampler2.grid_size())

    print 'OK'
Exemplo n.º 13
0
    def tst_pickle(self):
        from dials.algorithms.profile_model.modeller import SingleSampler
        import tempfile
        import cPickle as pickle
        width = 1000
        height = 1000
        scan_range = (2, 12)
        depth = scan_range[1] - scan_range[0]
        nz = 2
        sampler = SingleSampler(scan_range, nz)

        tf = tempfile.TemporaryFile()
        pickle.dump(sampler, tf)
        tf.flush()
        tf.seek(0)
        sampler2 = pickle.load(tf)

        assert (sampler.grid_size() == sampler2.grid_size())

        print 'OK'
Exemplo n.º 14
0
def test_indexing():
    from dials.algorithms.profile_model.modeller import SingleSampler

    width = 1000
    height = 1000
    scan_range = (2, 12)
    nz = 2
    sampler = SingleSampler(scan_range, nz)
    zstep = sampler.step_size()
    zind = list(range(nz))

    xp = [width * 0.5 for k in range(nz)]
    yp = [height * 0.5 for k in range(nz)]
    zp = [(z + 0.5) * zstep + scan_range[0] for z in zind]

    eps = 1e-10

    for x0, y0, z0, i in zip(xp, yp, zp, range(len(sampler))):
        x1, y1, z1 = sampler.coord(i)
        assert abs(z0 - z1) <= eps
Exemplo n.º 15
0
def test_nearest_n():
    from dials.algorithms.profile_model.modeller import SingleSampler

    scan_range = (2, 12)
    depth = scan_range[1] - scan_range[0]
    nz = 2
    sampler = SingleSampler(scan_range, nz)

    for i in range(1000):
        x = random.uniform(0, 1000)
        y = random.uniform(0, 1000)
        z = random.uniform(*scan_range)
        k = int(math.floor((z - scan_range[0]) * nz / depth))
        if k >= nz:
            k = nz - 1
        index0 = k
        index1 = sampler.nearest_n(0, (x, y, z))
        assert len(set(index1)) == len(index1)
        assert index0 == index1[-1]
        for ind in index1:
            assert abs(ind - k) <= 1
Exemplo n.º 16
0
  def tst_indexing(self):
    from dials.algorithms.profile_model.modeller import SingleSampler
    width = 1000
    height = 1000
    scan_range = (2, 12)
    depth = scan_range[1] - scan_range[0]
    nz = 2
    sampler = SingleSampler(scan_range, nz)
    zstep = sampler.step_size()
    zind = [k for k in range(nz)]

    xp = [width *0.5 for k in range(nz)]
    yp = [height *0.5 for k in range(nz)]
    zp = [(z + 0.5) * zstep + scan_range[0] for z in zind]

    eps = 1e-10

    for x0, y0, z0, i in zip(xp, yp, zp, range(len(sampler))):
      x1, y1, z1 = sampler.coord(i)
      assert(abs(z0 - z1) <= eps)

    print 'OK'
Exemplo n.º 17
0
    def tst_weights(self):
        from dials.algorithms.profile_model.modeller import SingleSampler
        from scitbx import matrix
        from math import log, exp

        width = 1000
        height = 1000
        scan_range = (2, 12)
        depth = scan_range[1] - scan_range[0]
        nz = 2
        sampler = SingleSampler(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

        # Ensure we get the expected weight at the next grid point at half way
        # between grid points
        expected = exp(-4.0 * log(2.0))
        for k in range(nz):
            coord1 = matrix.col(sampler.coord(k))
            if k > 0:
                coord = matrix.col(sampler.coord(k - 1))
                weight = sampler.weight(k, 0, coord)
                assert abs(weight - expected) < eps
                weight = sampler.weight(k, 0, (coord + coord1) / 2.0)
                assert abs(weight - 0.5) < eps
            if k < nz - 1:
                coord = matrix.col(sampler.coord(k + 1))
                weight = sampler.weight(k, 0, coord)
                assert abs(weight - expected) < eps
                weight = sampler.weight(k, 0, (coord + coord1) / 2.0)
                assert abs(weight - 0.5) < eps

        print "OK"
Exemplo n.º 18
0
    def tst_nearest(self):
        from random import uniform
        from dials.algorithms.profile_model.modeller import SingleSampler
        from math import floor

        width = 1000
        height = 1000
        scan_range = (2, 12)
        depth = scan_range[1] - scan_range[0]
        nz = 2
        sampler = SingleSampler(scan_range, nz)

        for i in range(1000):
            x = uniform(0, 1000)
            y = uniform(0, 1000)
            z = uniform(*scan_range)
            k = int(floor((z - scan_range[0]) / (depth / nz)))
            if k >= nz:
                k = nz - 1
            index0 = k
            index1 = sampler.nearest(0, (x, y, z))
            assert index0 == index1

        print "OK"
Exemplo n.º 19
0
    def create(cls,
               experiments,
               grid_size=5,
               scan_step=5,
               grid_method="circular_grid"):
        """
        Create the intensity calculator

        """
        from dials.algorithms.integration.parallel_integrator import (
            GaussianRSReferenceCalculator, )
        from dials.algorithms.profile_model.modeller import SingleSampler
        from dials.algorithms.profile_model.modeller import CircleSampler
        from dials.algorithms.profile_model.modeller import GridSampler
        from dials.algorithms.profile_model.modeller import EwaldSphereSampler
        from dials.algorithms.profile_model.gaussian_rs.transform import TransformSpec

        from math import ceil

        # Assume the detector and scan are the same in each case
        detector = experiments[0].detector
        scan = experiments[0].scan

        # Get the number of scan points
        scan_range = scan.get_oscillation_range(deg=True)
        scan_range = abs(scan_range[1] - scan_range[0])
        num_scan_points = int(ceil(scan_range / scan_step))

        # If multi panel then set to single
        if grid_method in ["regular_grid", "circular_grid"
                           ] and len(detector) > 1:
            grid_method = "single"

        # Create the sampler
        if grid_method == "single":
            sampler = SingleSampler(scan.get_array_range(), num_scan_points)
        elif grid_method == "regular_grid":
            sampler = GridSampler(
                detector[0].get_image_size(),
                scan.get_array_range(),
                (3, 3, num_scan_points),
            )
        elif grid_method == "circular_grid":
            sampler = CircleSampler(detector[0].get_image_size(),
                                    scan.get_array_range(), num_scan_points)
        elif grid_method == "spherical_grid":
            sampler = EwaldSphereGridSampler(
                experiments[0].beam,
                experiments[0].detector,
                experiments[0].goniometer,
                experiments[0].scan,
                num_scan_points,
            )
        else:
            raise RuntimeError("Unknown grid type")

        # Create the spec list
        spec_list = []
        for experiment in experiments:

            spec = TransformSpec(
                experiment.beam,
                experiment.detector,
                experiment.goniometer,
                experiment.scan,
                experiment.profile.sigma_b(deg=False),
                experiment.profile.sigma_m(deg=False),
                experiment.profile.n_sigma() * 1.5,
                grid_size,
            )

            spec_list.append(spec)

        # Return the intensity algorithm
        return GaussianRSReferenceCalculator(sampler, spec_list)
Exemplo n.º 20
0
    def tst_weights(self):
        from dials.algorithms.profile_model.modeller import SingleSampler
        from scitbx import matrix
        from math import log, exp
        width = 1000
        height = 1000
        scan_range = (2, 12)
        depth = scan_range[1] - scan_range[0]
        nz = 2
        sampler = SingleSampler(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)

        # Ensure we get the expected weight at the next grid point at half way
        # between grid points
        expected = exp(-4.0 * log(2.0))
        for k in range(nz):
            coord1 = matrix.col(sampler.coord(k))
            if k > 0:
                coord = matrix.col(sampler.coord(k - 1))
                weight = sampler.weight(k, 0, coord)
                assert (abs(weight - expected) < eps)
                weight = sampler.weight(k, 0, (coord + coord1) / 2.0)
                assert (abs(weight - 0.5) < eps)
            if k < nz - 1:
                coord = matrix.col(sampler.coord(k + 1))
                weight = sampler.weight(k, 0, coord)
                assert (abs(weight - expected) < eps)
                weight = sampler.weight(k, 0, (coord + coord1) / 2.0)
                assert (abs(weight - 0.5) < eps)

        print 'OK'
Exemplo n.º 21
0
def test_weights():
    from scitbx import matrix

    from dials.algorithms.profile_model.modeller import SingleSampler

    scan_range = (2, 12)
    nz = 2
    sampler = SingleSampler(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

    # Ensure we get the expected weight at the next grid point at half way
    # between grid points
    expected = math.exp(-4.0 * math.log(2.0))
    for k in range(nz):
        coord1 = matrix.col(sampler.coord(k))
        if k > 0:
            coord = matrix.col(sampler.coord(k - 1))
            weight = sampler.weight(k, 0, coord)
            assert abs(weight - expected) < eps
            weight = sampler.weight(k, 0, (coord + coord1) / 2.0)
            assert abs(weight - 0.5) < eps
        if k < nz - 1:
            coord = matrix.col(sampler.coord(k + 1))
            weight = sampler.weight(k, 0, coord)
            assert abs(weight - expected) < eps
            weight = sampler.weight(k, 0, (coord + coord1) / 2.0)
            assert abs(weight - 0.5) < eps