def __init__(self, crystal_gridding, fmodel, map_type, max_boxes, box_size_as_fraction=None): sgt = fmodel.f_obs().space_group().type() assert sgt.number() == 1 def get_map(fmodel, map_type, external_complete_set=None): f_map = fmodel.electron_density_map().map_coefficients( map_type=map_type, isotropize=True, fill_missing=False) fft_map = miller.fft_map(crystal_gridding=crystal_gridding, fourier_coefficients=f_map) return fft_map.real_map_unpadded() f_model = fmodel.f_model_scaled_with_k1() fft_map = miller.fft_map(crystal_gridding=crystal_gridding, fourier_coefficients=f_model) f_model_map_data = fft_map.real_map_unpadded() zero_complex_ma = f_model.customized_copy( data=flex.complex_double(f_model.data().size(), 0)) b = maptbx.boxes(fraction=0.3, n_real=f_model_map_data.focus(), max_boxes=max_boxes, log=sys.stdout) self.map_result = flex.double(flex.grid(b.n_real)) self.r = flex.double() for s, e in zip(b.starts, b.ends): f_model_map_data_omit = maptbx.set_box_copy( value=0, map_data_to=f_model_map_data, start=s, end=e) f_model_omit = f_model.structure_factors_from_map( map=f_model_map_data_omit, use_scale=True, anomalous_flag=False, use_sg=False) fmodel_ = mmtbx.f_model.manager(f_obs=fmodel.f_obs(), r_free_flags=fmodel.r_free_flags(), f_calc=f_model_omit, f_mask=zero_complex_ma) self.r.append(fmodel_.r_work()) f_map_data = get_map(fmodel=fmodel_, map_type=map_type) etmp = [e[0] - 1, e[1] - 1, e[2] - 1] # because .copy() includes right edge box = maptbx.copy(f_map_data, s, etmp) box.reshape(flex.grid(box.all())) maptbx.set_box(map_data_from=box, map_data_to=self.map_result, start=s, end=e) sd = self.map_result.sample_standard_deviation() self.map_result = self.map_result / sd self.map_coefficients = fmodel.f_obs().structure_factors_from_map( map=self.map_result, use_scale=True, anomalous_flag=False, use_sg=False)
def run_0(symbol="C 2"): space_group_info = sgtbx.space_group_info(symbol=symbol) xrs = random_structure.xray_structure(space_group_info=space_group_info, elements=["N"] * 50, volume_per_atom=100.0, random_u_iso=True) # b_cart = adptbx.random_traceless_symmetry_constrained_b_cart( crystal_symmetry=xrs.crystal_symmetry()) u_star = adptbx.u_cart_as_u_star(xrs.unit_cell(), adptbx.b_as_u(b_cart)) # F = xrs.structure_factors(d_min=1.5).f_calc() k_anisotropic = mmtbx.f_model.ext.k_anisotropic(F.indices(), u_star) # bin_selections = [] F.setup_binner(reflections_per_bin=50) for i_bin in F.binner().range_used(): sel = F.binner().selection(i_bin) bin_selections.append(sel) # d_spacings = F.d_spacings().data() ss = 1. / flex.pow2(d_spacings) / 4. k_mask_tmp = mmtbx.f_model.ext.k_mask(ss, 0.35, 80.) k_mask = flex.double(F.data().size(), 0) k_isotropic = flex.double(F.data().size(), 0) for s in bin_selections: d = d_spacings.select(s) k_mask.set_selected(s, flex.mean(k_mask_tmp.select(s))) k_isotropic.set_selected(s, random.randint(1, 10)) # fmodel = mmtbx.f_model.manager(xray_structure=xrs, f_obs=abs(F), k_isotropic=k_isotropic, k_anisotropic=k_anisotropic, k_mask=k_mask) f_calc = fmodel.f_calc() f_masks = fmodel.f_masks() f_model = fmodel.f_model() f_obs = abs(f_model) r_free_flags = f_obs.generate_r_free_flags(use_lattice_symmetry=False) # assert approx_equal(bulk_solvent.r_factor(f_obs.data(), f_model.data()), 0) aso = scaler.run(f_obs=f_obs, f_calc=f_calc, f_mask=f_masks, r_free_flags=r_free_flags, bin_selections=bin_selections, number_of_cycles=500, auto_convergence_tolerance=1.e-9, ss=ss, try_poly=True, try_expanal=True, try_expmin=True, verbose=True) print("r_f:", aso.r_final) print("r_l:", aso.r_low) print("r_h:", aso.r_high) assert aso.r_final < 0.0009, [aso.r_final, 0.0009] assert aso.r_low < 0.0017, [aso.r_low, 0.0017] assert aso.r_high < 0.0006, [aso.r_high, 0.0006] assert approx_equal( bulk_solvent.r_factor(f_obs.data(), abs(aso.core.f_model).data(), 1), bulk_solvent.r_factor(f_obs.data(), abs(aso.core.f_model).data()))
def run_0(symbol = "C 2"): space_group_info = sgtbx.space_group_info(symbol = symbol) xrs = random_structure.xray_structure( space_group_info = space_group_info, elements = ["N"]*50, volume_per_atom = 100.0, random_u_iso = True) # b_cart = adptbx.random_traceless_symmetry_constrained_b_cart( crystal_symmetry=xrs.crystal_symmetry()) u_star = adptbx.u_cart_as_u_star(xrs.unit_cell(), adptbx.b_as_u(b_cart)) # F = xrs.structure_factors(d_min = 1.5).f_calc() k_anisotropic = mmtbx.f_model.ext.k_anisotropic(F.indices(), u_star) # bin_selections = [] F.setup_binner(reflections_per_bin=50) for i_bin in F.binner().range_used(): sel = F.binner().selection(i_bin) bin_selections.append(sel) # d_spacings = F.d_spacings().data() ss = 1./flex.pow2(d_spacings) / 4. k_mask_tmp = mmtbx.f_model.ext.k_mask(ss, 0.35, 80.) k_mask = flex.double(F.data().size(), 0) k_isotropic = flex.double(F.data().size(), 0) for s in bin_selections: d = d_spacings.select(s) k_mask.set_selected(s, flex.mean(k_mask_tmp.select(s))) k_isotropic.set_selected(s, random.randint(1,10)) # fmodel = mmtbx.f_model.manager( xray_structure = xrs, f_obs = abs(F), k_isotropic = k_isotropic, k_anisotropic = k_anisotropic, k_mask = k_mask) f_calc = fmodel.f_calc() f_masks = fmodel.f_masks() f_model = fmodel.f_model() f_obs = abs(f_model) r_free_flags = f_obs.generate_r_free_flags(use_lattice_symmetry=False) # assert approx_equal(bulk_solvent.r_factor(f_obs.data(), f_model.data()), 0) aso = scaler.run( f_obs = f_obs, f_calc = f_calc, f_mask = f_masks, r_free_flags = r_free_flags, bin_selections = bin_selections, number_of_cycles = 500, auto_convergence_tolerance = 1.e-9, ss = ss, try_poly = True, try_expanal = True, try_expmin = True, verbose = False) assert approx_equal(aso.r_final, 0.00037, 0.00001) assert approx_equal(aso.r_low, 0.00002, 0.00001) assert approx_equal(aso.r_high, 0.00006, 0.00001) assert approx_equal( bulk_solvent.r_factor(f_obs.data(), abs(aso.core.f_model).data(), 1), bulk_solvent.r_factor(f_obs.data(), abs(aso.core.f_model).data()))
def __init__( self, crystal_gridding, fmodel, map_type, max_boxes, box_size_as_fraction=None): sgt = fmodel.f_obs().space_group().type() assert sgt.number() == 1 def get_map(fmodel, map_type, external_complete_set=None): f_map = fmodel.electron_density_map().map_coefficients( map_type = map_type, isotropize = True, fill_missing = False) fft_map = miller.fft_map( crystal_gridding = crystal_gridding, fourier_coefficients = f_map) return fft_map.real_map_unpadded() f_model = fmodel.f_model_scaled_with_k1() fft_map = miller.fft_map( crystal_gridding = crystal_gridding, fourier_coefficients = f_model) f_model_map_data = fft_map.real_map_unpadded() zero_complex_ma = f_model.customized_copy( data = flex.complex_double(f_model.data().size(), 0)) b = maptbx.boxes( fraction = 0.3, n_real = f_model_map_data.focus(), max_boxes=max_boxes, log=sys.stdout) self.map_result = flex.double(flex.grid(b.n_real)) self.r = flex.double() for s,e in zip(b.starts, b.ends): f_model_map_data_omit = maptbx.set_box_copy( value = 0, map_data_to = f_model_map_data, start = s, end = e) f_model_omit = f_model.structure_factors_from_map( map = f_model_map_data_omit, use_scale = True, anomalous_flag = False, use_sg = False) fmodel_ = mmtbx.f_model.manager( f_obs = fmodel.f_obs(), r_free_flags = fmodel.r_free_flags(), f_calc = f_model_omit, f_mask = zero_complex_ma) self.r.append(fmodel_.r_work()) f_map_data = get_map(fmodel=fmodel_, map_type=map_type) etmp = [e[0]-1, e[1]-1, e[2]-1] # because .copy() includes right edge box = maptbx.copy(f_map_data, s, etmp) box.reshape(flex.grid(box.all())) maptbx.set_box( map_data_from = box, map_data_to = self.map_result, start = s, end = e) sd = self.map_result.sample_standard_deviation() self.map_result = self.map_result/sd self.map_coefficients = fmodel.f_obs().structure_factors_from_map( map = self.map_result, use_scale = True, anomalous_flag = False, use_sg = False)