Example #1
0
def exercise_grad_u_transformations():
    uc = uctbx.unit_cell((12.296512479074615, 15.985466222796999, 20.904071214426843, 83.0, 109.0, 129.0))
    grad_u_star = (
        1681615.347859645,
        1740095.5140965185,
        2212142.6517873215,
        -2802250.0492254314,
        -1934508.748421974,
        1503834.0901063806,
    )
    grad_u_cart = adptbx.grad_u_star_as_u_cart(uc, grad_u_star)
    assert approx_equal(
        grad_u_cart,
        (
            11121.484290152286,
            3713.1538936460488,
            4293.4422553333607,
            -332.12536958297818,
            -340.3709419122527,
            406.25522344235526,
        ),
    )
    assert approx_equal(grad_u_star, adptbx.grad_u_cart_as_u_star(uc, grad_u_cart))
    grad_u_star_array = flex.sym_mat3_double([grad_u_star] * 3)
    grad_u_cart_array = adptbx.grad_u_star_as_u_cart(uc, grad_u_star_array)
    for g in grad_u_cart_array:
        assert approx_equal(grad_u_cart, g)
    grad_u_star_array = adptbx.grad_u_cart_as_u_star(uc, grad_u_cart_array)
    for g in grad_u_star_array:
        assert approx_equal(grad_u_star, g)
Example #2
0
def exercise_grad_u_transformations():
    uc = uctbx.unit_cell((12.296512479074615, 15.985466222796999,
                          20.904071214426843, 83.0, 109.0, 129.0))
    grad_u_star = (1681615.347859645, 1740095.5140965185, 2212142.6517873215,
                   -2802250.0492254314, -1934508.748421974, 1503834.0901063806)
    grad_u_cart = adptbx.grad_u_star_as_u_cart(uc, grad_u_star)
    assert approx_equal(
        grad_u_cart,
        (11121.484290152286, 3713.1538936460488, 4293.4422553333607,
         -332.12536958297818, -340.3709419122527, 406.25522344235526))
    assert approx_equal(grad_u_star,
                        adptbx.grad_u_cart_as_u_star(uc, grad_u_cart))
    grad_u_star_array = flex.sym_mat3_double([grad_u_star] * 3)
    grad_u_cart_array = adptbx.grad_u_star_as_u_cart(uc, grad_u_star_array)
    for g in grad_u_cart_array:
        assert approx_equal(grad_u_cart, g)
    grad_u_star_array = adptbx.grad_u_cart_as_u_star(uc, grad_u_cart_array)
    for g in grad_u_star_array:
        assert approx_equal(grad_u_star, g)
Example #3
0
 def __init__(self,
              xray_structure,
              restraints_manager,
              use_hd,
              selection=None):
     # Pairwise ADP restraints: 3 mix cases supported:
     #  o - ()
     #  o - o
     # () - ()
     # In SHELX this called SIMU restraints
     unit_cell = xray_structure.unit_cell()
     n_grad_u_iso = xray_structure.n_grad_u_iso()
     u_cart = xray_structure.scatterers().extract_u_cart(unit_cell)
     u_iso = xray_structure.scatterers().extract_u_iso()
     scatterers = xray_structure.scatterers()
     sites_cart = xray_structure.sites_cart()
     if (selection is not None):
         sites_cart = sites_cart.select(selection)
     bond_proxies_simple = restraints_manager.pair_proxies(
         sites_cart=sites_cart).bond_proxies.simple
     if (selection is None):
         selection = flex.bool(scatterers.size(), True)
     hd_selection = xray_structure.hd_selection()
     result = eval_adp_aniso_restraints(scatterers=scatterers,
                                        u_cart=u_cart,
                                        u_iso=u_iso,
                                        bond_proxies=bond_proxies_simple,
                                        selection=selection,
                                        hd_selection=hd_selection,
                                        n_grad_u_iso=n_grad_u_iso,
                                        use_hd=use_hd)
     self.target = result.target
     self.number_of_restraints = result.number_of_restraints
     if (n_grad_u_iso == 0):
         self.gradients_iso = None
     else:
         self.gradients_iso = result.gradients_iso()
     self.gradients_aniso_cart = result.gradients_aniso_cart()
     self.gradients_aniso_star = adptbx.grad_u_cart_as_u_star(
         unit_cell, self.gradients_aniso_cart)
Example #4
0
 def __init__(self, xray_structure, restraints_manager, use_hd,
              selection = None):
   # Pairwise ADP restraints: 3 mix cases supported:
   #  o - ()
   #  o - o
   # () - ()
   # In SHELX this called SIMU restraints
   unit_cell = xray_structure.unit_cell()
   n_grad_u_iso = xray_structure.n_grad_u_iso()
   u_cart = xray_structure.scatterers().extract_u_cart(unit_cell)
   u_iso  = xray_structure.scatterers().extract_u_iso()
   scatterers = xray_structure.scatterers()
   sites_cart = xray_structure.sites_cart()
   if(selection is not None):
     sites_cart = sites_cart.select(selection)
   bond_proxies_simple = restraints_manager.pair_proxies(sites_cart =
     sites_cart).bond_proxies.simple
   if(selection is None):
     selection = flex.bool(scatterers.size(), True)
   hd_selection = xray_structure.hd_selection()
   result = eval_adp_aniso_restraints(
     scatterers=scatterers,
     u_cart=u_cart,
     u_iso=u_iso,
     bond_proxies=bond_proxies_simple,
     selection=selection,
     hd_selection=hd_selection,
     n_grad_u_iso=n_grad_u_iso,
     use_hd=use_hd)
   self.target = result.target
   self.number_of_restraints = result.number_of_restraints
   if (n_grad_u_iso == 0) :
     self.gradients_iso = None
   else :
     self.gradients_iso = result.gradients_iso()
   self.gradients_aniso_cart = result.gradients_aniso_cart()
   self.gradients_aniso_star = adptbx.grad_u_cart_as_u_star(unit_cell,
                                              self.gradients_aniso_cart)
def u_star(structure_ideal, d_min, f_obs, verbose=0):
  sh = shifted_u_star(f_obs, structure_ideal, 0, 0, 0.0001)
  if (0 or verbose):
    print "u_star"
    sh.structure_shifted.show_summary().show_scatterers()
    print
  ls = xray.targets_least_squares_residual(
    f_obs.data(), sh.f_calc.data(), True, 1)
  gradient_flags = randomize_gradient_flags(
    xray.structure_factors.gradient_flags(u_aniso=True),
    f_obs.anomalous_flag())
  xray.set_scatterer_grad_flags(scatterers = sh.structure_shifted.scatterers(),
                                site       = gradient_flags.site,
                                u_iso      = gradient_flags.u_iso,
                                u_aniso    = gradient_flags.u_aniso,
                                occupancy  = gradient_flags.occupancy,
                                fp         = gradient_flags.fp,
                                fdp        = gradient_flags.fdp)
  grad_flags_counts = xray.scatterer_grad_flags_counts(sh.structure_shifted.scatterers())
  if(grad_flags_counts.n_parameters() > 0):
     if (0):
       print "u_aniso"
       print "gradient_flags.site      ", gradient_flags.site
       print "gradient_flags.u_iso     ", gradient_flags.u_iso
       print "gradient_flags.u_aniso   ", gradient_flags.u_aniso
       print "gradient_flags.occupancy ", gradient_flags.occupancy
       print "gradient_flags.fp        ", gradient_flags.fp
       print "gradient_flags.fdp       ", gradient_flags.fdp
       cntr_use_u_iso = 0
       cntr_use_u_aniso = 0
       cntr_grad_u_iso = 0
       cntr_grad_u_aniso = 0
       for scatterer in sh.structure_shifted.scatterers():
         if (scatterer.flags.use_u_iso()):  cntr_use_u_iso += 1
         if (scatterer.flags.use_u_aniso()):  cntr_use_u_aniso += 1
         if (scatterer.flags.grad_u_iso()):  cntr_grad_u_iso += 1
         if (scatterer.flags.grad_u_aniso()):  cntr_grad_u_aniso += 1
       print "use_u_iso                ", cntr_use_u_iso,cntr_grad_u_iso
       print "use_u_aniso              ", cntr_use_u_aniso,cntr_grad_u_aniso
     sfd = xray.structure_factors.gradients_direct(
       xray_structure=sh.structure_shifted,
       u_iso_refinable_params=None,
       miller_set=f_obs,
       d_target_d_f_calc=ls.derivatives(),
       n_parameters= 0
       )
     re = resampling(miller_set=f_obs)
     map0 = re(
       xray_structure=sh.structure_shifted,
       u_iso_refinable_params=None,
       dp=miller.array(miller_set=f_obs, data=ls.derivatives()),
       n_parameters= 0,
       verbose=verbose)

     grad_flags_counts = xray.scatterer_grad_flags_counts(sh.structure_shifted.scatterers())
     if(grad_flags_counts.u_aniso):
        sfd_d_target_d_u_cart = sfd.d_target_d_u_cart()
        map0_d_target_d_u_cart = map0.d_target_d_u_cart()
     top_gradient = None
     gradients_1 = []
     for i_scatterer,scatterer in enumerate(sh.structure_shifted.scatterers()):
       if(scatterer.flags.use_u_iso()):   parameter_name = "u_iso"
       if(scatterer.flags.use_u_aniso()): parameter_name = "u_star"
       if(parameter_name == "u_iso" and scatterer.flags.grad_u_iso()):
          direct_summ = sfd.d_target_d_u_iso()[i_scatterer]
          if (top_gradient is None): top_gradient = direct_summ
          fast_gradie = map0.d_target_d_u_iso()[i_scatterer]
          sys.stdout.flush()
          gradients_1.append([direct_summ, fast_gradie])
          match = judge(scatterer, parameter_name, direct_summ, fast_gradie,
                                                                  top_gradient)
          if (0 or verbose):
            print "direct summ[%d]: " % i_scatterer, direct_summ
            print "fast gradie[%d]: " % i_scatterer, fast_gradie, match
            print
          assert not match.is_bad
       if parameter_name == "u_star" and scatterer.flags.grad_u_aniso():
        sfd_star = sfd.d_target_d_u_star()[i_scatterer]
        sfd_cart = adptbx.grad_u_star_as_u_cart(
          structure_ideal.unit_cell(), sfd_star)
        assert approx_equal(
          sfd_star,
          adptbx.grad_u_cart_as_u_star(structure_ideal.unit_cell(), sfd_cart))
        for ij in xrange(6):
          direct_summ = sfd_d_target_d_u_cart[i_scatterer][ij]
          if (top_gradient is None): top_gradient = direct_summ
          fast_gradie = map0_d_target_d_u_cart[i_scatterer][ij]
          gradients_1.append([direct_summ, fast_gradie])
          match =judge(scatterer,"u_star",direct_summ,fast_gradie,top_gradient)
          if (0 or verbose or match.is_bad):
            print "direct summ[%d][%d]: " % (i_scatterer, ij), direct_summ
            print "fast gradie[%d][%d]: " % (i_scatterer, ij),fast_gradie,match
            print
          assert not match.is_bad
     # Making sure that gradients_1 = gradients_2
     for i_scatterer,scatterer in enumerate(sh.structure_shifted.scatterers()):
         if(not scatterer.flags.use_u_iso()):
            scatterer.u_iso = -12345.0
         if(not scatterer.flags.use_u_aniso()):
            scatterer.u_star =(-999.,-999.,-999.,-999.,-999.,-999.)
     sfd = xray.structure_factors.gradients_direct(
       xray_structure=sh.structure_shifted,
       u_iso_refinable_params=None,
       miller_set=f_obs,
       d_target_d_f_calc=ls.derivatives(),
       n_parameters= 0
       )
     re = resampling(miller_set=f_obs)
     map0 = re(
       xray_structure=sh.structure_shifted,
       u_iso_refinable_params=None,
       dp=miller.array(miller_set=f_obs, data=ls.derivatives()),
       n_parameters= 0,
       verbose=verbose)

     grad_flags_counts = \
            xray.scatterer_grad_flags_counts(sh.structure_shifted.scatterers())
     if(grad_flags_counts.u_aniso):
        sfd_d_target_d_u_cart = sfd.d_target_d_u_cart()
        map0_d_target_d_u_cart = map0.d_target_d_u_cart()
     gradients_2 = []
     for i_scatterer,scatterer in enumerate(sh.structure_shifted.scatterers()):
       if(scatterer.flags.use_u_iso()):   parameter_name = "u_iso"
       if(scatterer.flags.use_u_aniso()): parameter_name = "u_star"
       if(parameter_name == "u_iso" and scatterer.flags.grad_u_iso()):
          direct_summ = sfd.d_target_d_u_iso()[i_scatterer]
          fast_gradie = map0.d_target_d_u_iso()[i_scatterer]
          gradients_2.append([direct_summ, fast_gradie])
       if parameter_name == "u_star" and scatterer.flags.grad_u_aniso():
        sfd_star = sfd.d_target_d_u_star()[i_scatterer]
        sfd_cart = adptbx.grad_u_star_as_u_cart(
          structure_ideal.unit_cell(), sfd_star)
        assert approx_equal(
          sfd_star,
          adptbx.grad_u_cart_as_u_star(structure_ideal.unit_cell(), sfd_cart))
        for ij in xrange(6):
          direct_summ = sfd_d_target_d_u_cart[i_scatterer][ij]
          fast_gradie = map0_d_target_d_u_cart[i_scatterer][ij]
          gradients_2.append([direct_summ, fast_gradie])
     for g1,g2 in zip(gradients_1, gradients_2):
       assert approx_equal(g1, g2)
     sys.stdout.flush()
Example #6
0
 def d_target_d_u_star(self):
     if (self.d_target_d_u_star_was_used):
         raise RuntimeError(expensive_function_call_message)
     self.d_target_d_u_star_was_used = True
     return adptbx.grad_u_cart_as_u_star(self.xray_structure().unit_cell(),
                                         self.d_target_d_u_cart())
Example #7
0
 def d_target_d_u_star(self):
   if (self.d_target_d_u_star_was_used):
     raise RuntimeError(expensive_function_call_message)
   self.d_target_d_u_star_was_used = True
   return adptbx.grad_u_cart_as_u_star(
     self.xray_structure().unit_cell(), self.d_target_d_u_cart())
Example #8
0
def u_iso(structure_ideal, d_min, f_obs, tan_u_iso, verbose=0):
    sh = shifted_u_iso(f_obs, structure_ideal, 0, 0.05)
    if (0 or verbose):
        print("u_iso")
        sh.structure_shifted.show_summary().show_scatterers()
        print()
    ls = xray.targets_least_squares_residual(f_obs.data(), sh.f_calc.data(),
                                             True, 1)
    gradient_flags = randomize_gradient_flags(
        xray.structure_factors.gradient_flags(u_iso=True),
        f_obs.anomalous_flag())
    if (tan_u_iso):
        u_iso_refinable_params = flex.double()
    else:
        u_iso_refinable_params = None
    for scatterer in sh.structure_shifted.scatterers():
        scatterer.flags.set_grad_site(gradient_flags.site)
        scatterer.flags.set_grad_u_iso(gradient_flags.u_iso)
        scatterer.flags.set_grad_u_aniso(gradient_flags.u_aniso)
        scatterer.flags.set_grad_occupancy(gradient_flags.occupancy)
        scatterer.flags.set_grad_fp(gradient_flags.fp)
        scatterer.flags.set_grad_fdp(gradient_flags.fdp)
        if (tan_u_iso):
            scatterer.flags.set_tan_u_iso(True)
            param = random.randint(90, 120)
            scatterer.flags.param = param
            value = math.tan(scatterer.u_iso * math.pi / adptbx.b_as_u(param) -
                             math.pi / 2)
            u_iso_refinable_params.append(value)
    if (0):
        print("u_iso")
        print("gradient_flags.site      ", gradient_flags.site)
        print("gradient_flags.u_iso     ", gradient_flags.u_iso)
        print("gradient_flags.u_aniso   ", gradient_flags.u_aniso)
        print("gradient_flags.occupancy ", gradient_flags.occupancy)
        print("gradient_flags.fp        ", gradient_flags.fp)
        print("gradient_flags.fdp       ", gradient_flags.fdp)
        cntr_use_u_iso = 0
        cntr_use_u_aniso = 0
        cntr_grad_u_iso = 0
        cntr_grad_u_aniso = 0
        for scatterer in sh.structure_shifted.scatterers():
            if (scatterer.flags.use_u_iso()): cntr_use_u_iso += 1
            if (scatterer.flags.use_u_aniso()): cntr_use_u_aniso += 1
            if (scatterer.flags.grad_u_iso()): cntr_grad_u_iso += 1
            if (scatterer.flags.grad_u_aniso()): cntr_grad_u_aniso += 1
        print("use_u_iso                ", cntr_use_u_iso, cntr_grad_u_iso)
        print("use_u_aniso              ", cntr_use_u_aniso, cntr_grad_u_aniso)
    grad_flags_counts = \
              xray.scatterer_grad_flags_counts(sh.structure_shifted.scatterers())
    if (grad_flags_counts.n_parameters() > 0):
        sfd = xray.structure_factors.gradients_direct(
            xray_structure=sh.structure_shifted,
            u_iso_refinable_params=u_iso_refinable_params,
            miller_set=f_obs,
            d_target_d_f_calc=ls.derivatives(),
            n_parameters=0)
        re = resampling(miller_set=f_obs)
        map0 = re(xray_structure=sh.structure_shifted,
                  u_iso_refinable_params=u_iso_refinable_params,
                  dp=miller.array(miller_set=f_obs, data=ls.derivatives()),
                  n_parameters=0,
                  verbose=verbose)
        if (grad_flags_counts.u_aniso > 0):
            sfd_d_target_d_u_cart = sfd.d_target_d_u_cart()
            map0_d_target_d_u_cart = map0.d_target_d_u_cart()
        top_gradient = None
        gradients_1 = []
        for i_scatterer, scatterer in enumerate(
                sh.structure_shifted.scatterers()):
            if (0):
                print("i_scatterer= ", i_scatterer,scatterer.flags.use_u_iso(),\
                  scatterer.flags.grad_u_iso(), scatterer.flags.use_u_aniso(),\
                  scatterer.flags.grad_u_aniso(), scatterer.u_iso, scatterer.u_star)
            if (scatterer.flags.use_u_iso()): parameter_name = "u_iso"
            if (scatterer.flags.use_u_aniso()): parameter_name = "u_star"
            if (parameter_name == "u_iso" and scatterer.flags.grad_u_iso()
                    and scatterer.flags.use_u_iso()):
                direct_summ = sfd.d_target_d_u_iso()[i_scatterer]
                if (top_gradient is None): top_gradient = direct_summ
                fast_gradie = map0.d_target_d_u_iso()[i_scatterer]
                sys.stdout.flush()
                gradients_1.append([direct_summ, fast_gradie])
                match = judge(scatterer, parameter_name, direct_summ,
                              fast_gradie, top_gradient)
                if (0 or verbose):
                    print("direct summ[%d]: " % i_scatterer, direct_summ)
                    print("fast gradie[%d]: " % i_scatterer, fast_gradie,
                          match)
                    print()
                assert not match.is_bad
            if (parameter_name == "u_star" and scatterer.flags.grad_u_aniso()
                    and scatterer.flags.use_u_aniso()):
                sfd_star = sfd.d_target_d_u_star()[i_scatterer]
                sfd_cart = adptbx.grad_u_star_as_u_cart(
                    structure_ideal.unit_cell(), sfd_star)
                assert approx_equal(
                    sfd_star,
                    adptbx.grad_u_cart_as_u_star(structure_ideal.unit_cell(),
                                                 sfd_cart))
                for ij in range(6):
                    direct_summ = sfd_d_target_d_u_cart[i_scatterer][ij]
                    if (top_gradient is None): top_gradient = direct_summ
                    fast_gradie = map0_d_target_d_u_cart[i_scatterer][ij]
                    gradients_1.append([direct_summ, fast_gradie])
                    match = judge(scatterer, "u_star", direct_summ,
                                  fast_gradie, top_gradient)
                    if (0 or verbose or match.is_bad):
                        print("direct summ[%d][%d]: " % (i_scatterer, ij),
                              direct_summ)
                        print("fast gradie[%d][%d]: " % (i_scatterer, ij),
                              fast_gradie, match)
                        print()
                    assert not match.is_bad
        # Making sure that gradients_1 = gradients_2
        for i_scatterer, scatterer in enumerate(
                sh.structure_shifted.scatterers()):
            if (not scatterer.flags.use_u_iso()):
                scatterer.u_iso = -12345.0
            if (not scatterer.flags.use_u_aniso()):
                scatterer.u_star = (-999., -999., -999., -999., -999., -999.)
        sfd = xray.structure_factors.gradients_direct(
            xray_structure=sh.structure_shifted,
            u_iso_refinable_params=u_iso_refinable_params,
            miller_set=f_obs,
            d_target_d_f_calc=ls.derivatives(),
            n_parameters=0)
        re = resampling(miller_set=f_obs)
        map0 = re(xray_structure=sh.structure_shifted,
                  u_iso_refinable_params=u_iso_refinable_params,
                  dp=miller.array(miller_set=f_obs, data=ls.derivatives()),
                  n_parameters=0,
                  verbose=verbose)
        grad_flags_counts = \
               xray.scatterer_grad_flags_counts(sh.structure_shifted.scatterers())
        if (grad_flags_counts.u_aniso):
            sfd_d_target_d_u_cart = sfd.d_target_d_u_cart()
            map0_d_target_d_u_cart = map0.d_target_d_u_cart()
        gradients_2 = []
        for i_scatterer, scatterer in enumerate(
                sh.structure_shifted.scatterers()):
            if (scatterer.flags.use_u_iso()): parameter_name = "u_iso"
            if (scatterer.flags.use_u_aniso()): parameter_name = "u_star"
            if (parameter_name == "u_iso" and scatterer.flags.grad_u_iso()
                    and scatterer.flags.use_u_iso()):
                direct_summ = sfd.d_target_d_u_iso()[i_scatterer]
                fast_gradie = map0.d_target_d_u_iso()[i_scatterer]
                gradients_2.append([direct_summ, fast_gradie])
            if (parameter_name == "u_star" and scatterer.flags.grad_u_aniso()
                    and scatterer.flags.use_u_aniso()):
                sfd_star = sfd.d_target_d_u_star()[i_scatterer]
                sfd_cart = adptbx.grad_u_star_as_u_cart(
                    structure_ideal.unit_cell(), sfd_star)
                assert approx_equal(
                    sfd_star,
                    adptbx.grad_u_cart_as_u_star(structure_ideal.unit_cell(),
                                                 sfd_cart))
                for ij in range(6):
                    direct_summ = sfd_d_target_d_u_cart[i_scatterer][ij]
                    fast_gradie = map0_d_target_d_u_cart[i_scatterer][ij]
                    gradients_2.append([direct_summ, fast_gradie])
        for g1, g2 in zip(gradients_1, gradients_2):
            assert approx_equal(g1, g2)
        sys.stdout.flush()