def run(args):
  assert len(args) in [0,2], "n_sites, n_trials"
  if (len(args) == 0):
    n_sites, n_trials = 3, 2
    out = null_out()
  else:
    n_sites, n_trials = [int(arg) for arg in args]
    out = sys.stdout
  #
  show_times_at_exit()
  class type_info(object):
    def __init__(O, type, use_analytical_gradients):
      O.type = type
      O.use_analytical_gradients = use_analytical_gradients
    def __str__(O):
      return "%s(use_analytical_gradients=%s)" % (
        O.type.__name__, str(O.use_analytical_gradients))
  spherical_types = [
    type_info(euler_params, False),
    type_info(euler_params, True),
    type_info(euler_angles_xyz, False),
    type_info(euler_angles_xyz, True),
    type_info(euler_angles_zxz, False),
    type_info(euler_angles_zxz, True),
    type_info(euler_angles_yxyz, False),
    type_info(euler_angles_xyzy, False),
    type_info(inf_euler_params, False),
    type_info(inf_axis_angle, False)]
  nfun_accu = {}
  n_failed = {}
  for ti in spherical_types:
    nfun_accu[str(ti)] = flex.size_t()
    n_failed[str(ti)] = 0
  mersenne_twister = flex.mersenne_twister(seed=0)
  for i_trial in xrange(n_trials):
    sites = [matrix.col(s) for s in flex.vec3_double(
      mersenne_twister.random_double(size=n_sites*3)*2-1)]
    c = center_of_mass_from_sites(sites)
    r = matrix.sqr(mersenne_twister.random_double_r3_rotation_matrix())
    wells = [r*(s-c)+c for s in sites]
    for ti in spherical_types:
      r = refinery(spherical_type_info=ti, sites=sites, wells=wells, out=out)
      nfun_accu[str(ti)].append(r.nfun)
      if (r.failed):
        n_failed[str(ti)] += 1
  nfun_sums = []
  annotations = []
  for ti in spherical_types:
    print >> out, ti
    nfuns = nfun_accu[str(ti)]
    stats = nfuns.as_double().min_max_mean()
    stats.show(out=out, prefix="  ")
    nfun_sums.append((str(ti), flex.sum(nfuns)))
    if (n_failed[str(ti)] == 0):
      annotations.append(None)
    else:
      annotations.append("failed: %d" % n_failed[str(ti)])
  print >> out
  show_sorted_by_counts(
    label_count_pairs=nfun_sums,
    reverse=False,
    out=out,
    annotations=annotations)
  print >> out
  print "OK"
Exemple #2
0
 def __init__(O, sites):
   O.pivot = center_of_mass_from_sites(sites=sites)
   O.normal = None
   O.T0b = matrix.rt(((1,0,0,0,1,0,0,0,1), -O.pivot))
   O.Tb0 = matrix.rt(((1,0,0,0,1,0,0,0,1), O.pivot))
def run(args):
    assert len(args) in [0, 2], "n_sites, n_trials"
    if (len(args) == 0):
        n_sites, n_trials = 3, 2
        out = null_out()
    else:
        n_sites, n_trials = [int(arg) for arg in args]
        out = sys.stdout
    #
    show_times_at_exit()

    class type_info(object):
        def __init__(O, type, use_analytical_gradients):
            O.type = type
            O.use_analytical_gradients = use_analytical_gradients

        def __str__(O):
            return "%s(use_analytical_gradients=%s)" % (
                O.type.__name__, str(O.use_analytical_gradients))

    spherical_types = [
        type_info(euler_params, False),
        type_info(euler_params, True),
        type_info(euler_angles_xyz, False),
        type_info(euler_angles_xyz, True),
        type_info(euler_angles_zxz, False),
        type_info(euler_angles_zxz, True),
        type_info(euler_angles_yxyz, False),
        type_info(euler_angles_xyzy, False),
        type_info(inf_euler_params, False),
        type_info(inf_axis_angle, False)
    ]
    nfun_accu = {}
    n_failed = {}
    for ti in spherical_types:
        nfun_accu[str(ti)] = flex.size_t()
        n_failed[str(ti)] = 0
    mersenne_twister = flex.mersenne_twister(seed=0)
    for i_trial in xrange(n_trials):
        sites = [
            matrix.col(s) for s in flex.vec3_double(
                mersenne_twister.random_double(size=n_sites * 3) * 2 - 1)
        ]
        c = center_of_mass_from_sites(sites)
        r = matrix.sqr(mersenne_twister.random_double_r3_rotation_matrix())
        wells = [r * (s - c) + c for s in sites]
        for ti in spherical_types:
            r = refinery(spherical_type_info=ti,
                         sites=sites,
                         wells=wells,
                         out=out)
            nfun_accu[str(ti)].append(r.nfun)
            if (r.failed):
                n_failed[str(ti)] += 1
    nfun_sums = []
    annotations = []
    for ti in spherical_types:
        print >> out, ti
        nfuns = nfun_accu[str(ti)]
        stats = nfuns.as_double().min_max_mean()
        stats.show(out=out, prefix="  ")
        nfun_sums.append((str(ti), flex.sum(nfuns)))
        if (n_failed[str(ti)] == 0):
            annotations.append(None)
        else:
            annotations.append("failed: %d" % n_failed[str(ti)])
    print >> out
    show_sorted_by_counts(label_count_pairs=nfun_sums,
                          reverse=False,
                          out=out,
                          annotations=annotations)
    print >> out
    print "OK"
Exemple #4
0
 def __init__(O, sites):
     O.pivot = center_of_mass_from_sites(sites=sites)
     O.normal = None
     O.T0b = matrix.rt(((1, 0, 0, 0, 1, 0, 0, 0, 1), -O.pivot))
     O.Tb0 = matrix.rt(((1, 0, 0, 0, 1, 0, 0, 0, 1), O.pivot))