コード例 #1
0
ファイル: tst_free_motion.py プロジェクト: dials/cctbx
def exercise_reference_impl_quick():
    sites_cart = fmri.create_triangle_with_center_of_mass_at_origin()
    assert approx_equal(flex.vec3_double(sites_cart).mean(), (0, 0, 0))
    inertia1 = fmri.body_inertia(sites_cart=sites_cart)
    inertia2 = matrix.sym(sym_mat3=scitbx.math.inertia_tensor(
        points=flex.vec3_double(sites_cart), pivot=(0, 0, 0)))
    assert approx_equal(inertia1, inertia2)
    #
    for use_classical_accel in [False, True]:
        sim = fmri.simulation()
        assert approx_equal(
            [sim.e_pot, sim.e_kin_ang, sim.e_kin_lin, sim.e_kin, sim.e_tot], [
                0.64030878777041611, 0.012310594130384761, 0.02835,
                0.04066059413038476, 0.68096938190080092
            ])
        for i in range(100):
            sim.dynamics_step(delta_t=0.01,
                              use_classical_accel=use_classical_accel)
        expected = [[
            0.028505221929112364, 0.091503230553568404, 0.56329655444242244,
            0.65479978499599079, 0.6833050069251031
        ],
                    [
                        0.053276067541032097, 0.091503230553568404,
                        0.53805622991666513, 0.62955946047023348,
                        0.68283552801126557
                    ]][int(use_classical_accel)]
        assert approx_equal(
            [sim.e_pot, sim.e_kin_ang, sim.e_kin_lin, sim.e_kin, sim.e_tot],
            expected)
コード例 #2
0
def motion(n_steps=20, callback=None):
    points = create_triangle_with_center_of_mass_at_origin()
    shift = matrix.col((0.1, 0.1, 0.1))
    i_step = 0
    while (callback is not None or i_step != n_steps):
        if (callback is None):
            print[point.elems for point in points]
        else:
            status = callback(points)
            if status == False:
                break
        for i in xrange(len(points)):
            points[i] += shift
        i_step += 1
        if (i_step % 10 == 0):
            shift = -shift
コード例 #3
0
def motion(n_steps=20, callback=None):
  points = create_triangle_with_center_of_mass_at_origin()
  shift = matrix.col((0.1,0.1,0.1))
  i_step = 0
  while (callback is not None or i_step != n_steps):
    if (callback is None):
      print [point.elems for point in points]
    else:
      status = callback(points)
      if status == False :
        break
    for i in xrange(len(points)):
      points[i] += shift
    i_step += 1
    if (i_step % 10 == 0):
      shift = -shift
コード例 #4
0
def exercise_reference_impl_quick():
    sites_cart = fmri.create_triangle_with_center_of_mass_at_origin()
    assert approx_equal(flex.vec3_double(sites_cart).mean(), (0, 0, 0))
    inertia1 = fmri.body_inertia(sites_cart=sites_cart)
    inertia2 = matrix.sym(sym_mat3=scitbx.math.inertia_tensor(points=flex.vec3_double(sites_cart), pivot=(0, 0, 0)))
    assert approx_equal(inertia1, inertia2)
    #
    for use_classical_accel in [False, True]:
        sim = fmri.simulation()
        assert approx_equal(
            [sim.e_pot, sim.e_kin_ang, sim.e_kin_lin, sim.e_kin, sim.e_tot],
            [0.64030878777041611, 0.012310594130384761, 0.02835, 0.04066059413038476, 0.68096938190080092],
        )
        for i in xrange(100):
            sim.dynamics_step(delta_t=0.01, use_classical_accel=use_classical_accel)
        expected = [
            [0.028505221929112364, 0.091503230553568404, 0.56329655444242244, 0.65479978499599079, 0.6833050069251031],
            [0.053276067541032097, 0.091503230553568404, 0.53805622991666513, 0.62955946047023348, 0.68283552801126557],
        ][int(use_classical_accel)]
        assert approx_equal([sim.e_pot, sim.e_kin_ang, sim.e_kin_lin, sim.e_kin, sim.e_tot], expected)
コード例 #5
0
ファイル: tst_free_motion_hard.py プロジェクト: dials/cctbx
def create_triangle_with_random_center_of_mass(mersenne_twister):
  sites = create_triangle_with_center_of_mass_at_origin()
  t = matrix.col(mersenne_twister.random_double(size=3)*2-1)
  return [site+t for site in sites]
コード例 #6
0
def create_triangle_with_random_center_of_mass(mersenne_twister):
  sites = create_triangle_with_center_of_mass_at_origin()
  t = matrix.col(mersenne_twister.random_double(size=3)*2-1)
  return [site+t for site in sites]