示例#1
0
def get_files_sorted(pdb_files, hkl_files):
    ifn_p = open("/".join([pdb_files, "INDEX"]), "r")
    ifn_r = os.listdir(hkl_files)
    pdbs = flex.std_string()
    mtzs = flex.std_string()
    codes = flex.std_string()
    sizes = flex.double()
    cntr = 0
    for lp in ifn_p.readlines():
        lp = lp.strip()
        pdb_file_name = "/".join([pdb_files, lp])
        assert os.path.isfile(pdb_file_name)
        pdb_code = lp[-11:-7]
        #
        # FOR DEBUGGING
        #if pdb_code != "4w71": continue
        #
        #
        lr = lp.replace("pdb", "r")
        hkl_file_name = "/".join([hkl_files, "%s.mtz" % pdb_code])
        if (os.path.isfile(hkl_file_name)):
            cntr += 1
            s = os.path.getsize(pdb_file_name) + os.path.getsize(hkl_file_name)
            pdbs.append(pdb_file_name)
            mtzs.append(hkl_file_name)
            codes.append(pdb_code)
            sizes.append(s)
            #if codes.size()==100: break
    print("Total:", cntr)
    sel = flex.sort_permutation(sizes)
    pdbs = pdbs.select(sel)
    mtzs = mtzs.select(sel)
    codes = codes.select(sel)
    sizes = sizes.select(sel)
    return pdbs, mtzs, codes, sizes
def run(args):
    command_line = (option_parser().option(
        "--output_dirname",
        "-o",
        type="string",
        help="Directory for output files.")).process(args=args)
    args = command_line.args
    output_dirname = command_line.options.output_dirname
    if output_dirname is None:
        output_dirname = os.path.dirname(args[0])
    assert len(args) == 2
    xy_pairs = []
    for i, filename in enumerate(args):
        print "Reading data from: %s" % filename
        f = open(filename, 'rb')
        x, y = zip(*[
            line.split() for line in f.readlines() if not line.startswith("#")
        ])
        x = flex.double(flex.std_string(x))
        y = flex.double(flex.std_string(y))
        xy_pairs.append((x, y))

    signal = xy_pairs[0]
    background = xy_pairs[1]

    signal_x, background_subtracted = subtract_background(signal,
                                                          background,
                                                          plot=True)
    filename = os.path.join(output_dirname, "background_subtracted.txt")
    f = open(filename, "wb")
    print >> f, "\n".join(
        ["%i %f" % (x, y) for x, y in zip(signal_x, background_subtracted)])
    f.close()
    print "Background subtracted spectrum written to %s" % filename
示例#3
0
def import_ptms(ptms_outfile):
    chain_id = flex.std_string()
    resid = flex.int()
    resname = flex.std_string()
    goto_atom = flex.std_string()
    short_name = flex.std_string()
    full_name = flex.std_string()
    cc = flex.double()
    d_ref = flex.double()
    d_mid = flex.double()
    d_new_in_ref = flex.double()
    d_new_diff = flex.double()
    d_far = flex.double()
    ratio = flex.double()
    score = flex.double()
    model_id = flex.int()
    d_min = flex.double()
    b_factor = flex.double()
    imported_ptms = (chain_id, resid, resname, goto_atom, short_name,
                     full_name, cc, d_ref, d_mid, d_new_in_ref, d_new_diff,
                     d_far, ratio, score, model_id, d_min, b_factor)
    with open(ptms_outfile, "rb") as out:
        for line in out.readlines():
            items = line.split()
            for array, coerce_lambda in zip(
                    imported_ptms,
                (lambda x: x, lambda x: int(x), lambda x: x, lambda x: x,
                 lambda x: x, lambda x: x, lambda x: float(x),
                 lambda x: float(x), lambda x: float(x), lambda x: float(x),
                 lambda x: float(x), lambda x: float(x), lambda x: float(x),
                 lambda x: float(x), lambda x: int(x), lambda x: float(x),
                 lambda x: float(x))):
                array.append(coerce_lambda(items.pop(0)))
    return imported_ptms
def run(args):
  command_line = (option_parser()
                  .option("--output_dirname", "-o",
                          type="string",
                          help="Directory for output files.")
                  ).process(args=args)
  args = command_line.args
  output_dirname = command_line.options.output_dirname
  if output_dirname is None:
    output_dirname = os.path.dirname(args[0])
  assert len(args) == 2
  xy_pairs = []
  for i, filename in enumerate(args):
    print "Reading data from: %s" %filename
    f = open(filename, 'rb')
    x, y = zip(*[line.split() for line in f.readlines() if not line.startswith("#")])
    x = flex.double(flex.std_string(x))
    y = flex.double(flex.std_string(y))
    xy_pairs.append((x,y))

  signal = xy_pairs[0]
  background = xy_pairs[1]

  signal_x, background_subtracted = subtract_background(signal, background, plot=True)
  filename = os.path.join(output_dirname, "background_subtracted.txt")
  f = open(filename, "wb")
  print >> f, "\n".join(["%i %f" %(x, y)
                         for x, y in zip(signal_x, background_subtracted)])
  f.close()
  print "Background subtracted spectrum written to %s" %filename
def exercise_01():
    import libtbx.load_env

    if not libtbx.env.has_module("reduce"):
        print "Reduce not installed, needed for model.add_hydrogens(). skipping"
        return

    pdb_file_name = "add_h_to_hoh.pdb"
    tmp_f = open(pdb_file_name, "w")
    tmp_f.write(input_model)
    tmp_f.close()
    processed_pdb_files_srv = mmtbx.utils.process_pdb_file_srv(log=StringIO())
    processed_pdb_file, pdb_inp = processed_pdb_files_srv.process_pdb_files(pdb_file_names=[pdb_file_name])
    xray_structure = processed_pdb_file.xray_structure()
    #
    geometry = processed_pdb_file.geometry_restraints_manager(show_energies=False, assume_hydrogens_all_missing=True)
    restraints_manager = mmtbx.restraints.manager(geometry=geometry)
    #
    model = mmtbx.model.manager(
        refinement_flags=None,
        processed_pdb_files_srv=processed_pdb_files_srv,
        restraints_manager=restraints_manager,
        xray_structure=xray_structure,
        pdb_hierarchy=processed_pdb_file.all_chain_proxies.pdb_hierarchy,
        log=None,
    )
    ####
    model.add_hydrogens(correct_special_position_tolerance=1.0)
    result = StringIO()
    model.write_pdb_file(out=result)
    result = result.getvalue().splitlines()
    ####
    result1 = []
    for r1 in result:
        if r1.startswith("ATOM") or r1.startswith("HETATM"):
            result1.append(r1)
    result2 = []
    for r2 in expected_result.splitlines():
        if r2.startswith("ATOM") or r2.startswith("HETATM"):
            result2.append(r2)
    assert len(result1) == len(result2)
    for r1, r2 in zip(result1, result2):
        r1 = r1[:30] + r1[60:]
        r2 = r2[:30] + r2[60:]
        assert not show_diff(r1, r2)
    ####
    cntr = 0
    xrs1 = iotbx.pdb.pdb_input(
        source_info=None, lines=flex.std_string(expected_result.splitlines())
    ).xray_structure_simple()
    xrs2 = iotbx.pdb.pdb_input(source_info=None, lines=flex.std_string(result)).xray_structure_simple()
    for s1, s2 in zip(xrs1.scatterers(), xrs2.scatterers()):
        if s1.element_symbol().strip() not in ["H", "D"]:
            assert s1.element_symbol().strip() == s2.element_symbol().strip()
            assert approx_equal(s1.site, s2.site)
            cntr += 1
    assert cntr == 19
示例#6
0
def exercise_writer():
    from iotbx import file_reader
    from cctbx import uctbx, sgtbx
    from scitbx.array_family import flex
    file_name = libtbx.env.find_in_repositories(
        relative_path=
        "phenix_regression/wizards/partial_refine_001_map_coeffs.mtz",
        test=os.path.isfile)
    if file_name is None:
        print "Can't find map coefficients file, skipping."
        return
    mtz_in = file_reader.any_file(file_name, force_type="hkl").file_object
    miller_arrays = mtz_in.as_miller_arrays()
    map_coeffs = miller_arrays[0]
    fft_map = map_coeffs.fft_map(resolution_factor=1 / 3.0)
    fft_map.apply_sigma_scaling()
    fft_map.as_ccp4_map(file_name="2mFo-DFc.map")
    m = iotbx.ccp4_map.map_reader(file_name="2mFo-DFc.map")
    real_map = fft_map.real_map_unpadded()
    mmm = flex.double(list(real_map)).min_max_mean()
    assert approx_equal(m.unit_cell_parameters,
                        map_coeffs.unit_cell().parameters())
    assert approx_equal(mmm.min, m.header_min)
    assert approx_equal(mmm.max, m.header_max)
    #assert approx_equal(mmm.mean, m.header_mean)
    # random small maps of different sizes
    for nxyz in flex.nested_loop((1, 1, 1), (4, 4, 4)):
        mt = flex.mersenne_twister(0)
        grid = flex.grid(nxyz)
        map = mt.random_double(size=grid.size_1d())
        map.reshape(grid)
        real_map = fft_map.real_map_unpadded()
        iotbx.ccp4_map.write_ccp4_map(
            file_name="random.map",
            unit_cell=uctbx.unit_cell((1, 1, 1, 90, 90, 90)),
            space_group=sgtbx.space_group_info("P1").group(),
            gridding_first=(0, 0, 0),
            gridding_last=tuple(fft_map.n_real()),
            map_data=real_map,
            labels=flex.std_string(["iotbx.ccp4_map.tst"]))
        m = iotbx.ccp4_map.map_reader(file_name="random.map")
        mmm = flex.double(list(real_map)).min_max_mean()
        assert approx_equal(m.unit_cell_parameters, (1, 1, 1, 90, 90, 90))
        assert approx_equal(mmm.min, m.header_min)
        assert approx_equal(mmm.max, m.header_max)
        #
        gridding_first = (0, 0, 0)
        gridding_last = tuple(fft_map.n_real())
        map_box = maptbx.copy(map, gridding_first, gridding_last)
        map_box.reshape(flex.grid(map_box.all()))
        iotbx.ccp4_map.write_ccp4_map(
            file_name="random_box.map",
            unit_cell=uctbx.unit_cell((1, 1, 1, 90, 90, 90)),
            space_group=sgtbx.space_group_info("P1").group(),
            map_data=map_box,
            labels=flex.std_string(["iotbx.ccp4_map.tst"]))
示例#7
0
def exercise_writer () :
  from iotbx import file_reader
  from cctbx import uctbx, sgtbx
  from scitbx.array_family import flex
  file_name = libtbx.env.find_in_repositories(
    relative_path="phenix_regression/wizards/partial_refine_001_map_coeffs.mtz",
    test=os.path.isfile)
  if file_name is None :
    print "Can't find map coefficients file, skipping."
    return
  mtz_in = file_reader.any_file(file_name, force_type="hkl").file_object
  miller_arrays = mtz_in.as_miller_arrays()
  map_coeffs = miller_arrays[0]
  fft_map = map_coeffs.fft_map(resolution_factor=1/3.0)
  fft_map.apply_sigma_scaling()
  fft_map.as_ccp4_map(file_name="2mFo-DFc.map")
  m = iotbx.ccp4_map.map_reader(file_name="2mFo-DFc.map")
  real_map = fft_map.real_map_unpadded()
  mmm = flex.double(list(real_map)).min_max_mean()
  assert approx_equal(m.unit_cell_parameters,
                      map_coeffs.unit_cell().parameters())
  assert approx_equal(mmm.min, m.header_min)
  assert approx_equal(mmm.max, m.header_max)
  #assert approx_equal(mmm.mean, m.header_mean)
  # random small maps of different sizes
  for nxyz in flex.nested_loop((1,1,1),(4,4,4)):
    mt = flex.mersenne_twister(0)
    grid = flex.grid(nxyz)
    map = mt.random_double(size=grid.size_1d())
    map.reshape(grid)
    real_map = fft_map.real_map_unpadded()
    iotbx.ccp4_map.write_ccp4_map(
      file_name="random.map",
      unit_cell=uctbx.unit_cell((1,1,1,90,90,90)),
      space_group=sgtbx.space_group_info("P1").group(),
      gridding_first=(0,0,0),
      gridding_last=tuple(fft_map.n_real()),
      map_data=real_map,
      labels=flex.std_string(["iotbx.ccp4_map.tst"]))
    m = iotbx.ccp4_map.map_reader(file_name="random.map")
    mmm = flex.double(list(real_map)).min_max_mean()
    assert approx_equal(m.unit_cell_parameters, (1,1,1,90,90,90))
    assert approx_equal(mmm.min, m.header_min)
    assert approx_equal(mmm.max, m.header_max)
    #
    gridding_first = (0,0,0)
    gridding_last = tuple(fft_map.n_real())
    map_box = maptbx.copy(map, gridding_first, gridding_last)
    map_box.reshape(flex.grid(map_box.all()))
    iotbx.ccp4_map.write_ccp4_map(
      file_name="random_box.map",
      unit_cell=uctbx.unit_cell((1,1,1,90,90,90)),
      space_group=sgtbx.space_group_info("P1").group(),
      map_data=map_box,
      labels=flex.std_string(["iotbx.ccp4_map.tst"]))
def run(args):
  assert len(args) == 0
  from cctbx.crystal.distance_based_connectivity import \
    build_simple_two_way_bond_sets
  from scitbx.array_family import flex
  sites_cart = flex.vec3_double([
    (25.655, 43.266, 42.630),
    (24.038, 43.853, 43.337),
    (23.048, 44.525, 43.290),
    (21.223, 44.207, 41.475),
    (24.951, 47.170, 37.585),
    (19.298, 46.942, 51.808)])
  elements = flex.std_string(["S", "C", "N", "CU", "ZN", "CA"])
  bond_list = build_simple_two_way_bond_sets(
    sites_cart=sites_cart, elements=elements)
  assert [sorted(b) for b in bond_list] == [[1], [0,2], [1,3], [2], [], []]
  #
  # caffeine
  sites_cart = flex.vec3_double([
    (-2.986, 0.015, 1.643),
    (-1.545, 0.015, 1.643),
    (-0.733, 0.015, 2.801),
    (0.592, 0.015, 2.395),
    (0.618, 0.015, 1.034),
    (1.758, 0.015, 0.102),
    (3.092, -0.06, 0.694),
    (1.525, 0.015, -1.360),
    (2.489, -0.024, -2.139),
    (0.158, 0.015, -1.888),
    (-0.025, 0.024, -3.330),
    (-0.986, 0.015, -0.959),
    (-2.155, 0.008, -1.408),
    (-0.733, 0.015, 0.565),
    (-3.346, 0.016, 2.662),
    (-3.347, 0.896, 1.133),
    (-3.347, -0.868, 1.136),
    (-1.083, 0.02, 3.822),
    (3.184, -0.975, 1.26),
    (3.245, 0.785, 1.348),
    (3.835, -0.047, -0.09),
    (0.508, 0.861, -3.756),
    (-1.076, 0.113, -3.560),
    (0.358, -0.896, -3.748)
  ])
  elements = flex.std_string([
    ' C', ' N', ' C', ' N', ' C', ' N', ' C', ' C', ' O', ' N', ' C', ' C',
    ' O', ' C', ' H', ' H', ' H', ' H', ' H', ' H', ' H', ' H', ' H', ' H'])
  bonds = build_simple_two_way_bond_sets(
    sites_cart=sites_cart, elements=elements)
  assert bonds.size() == sites_cart.size()
  assert list(bonds[0]) == [1, 14, 15, 16]
  #
  print "OK"
示例#9
0
文件: __init__.py 项目: dials/cctbx
    def __init__(self,
                 seq_a,
                 seq_b,
                 style="global",
                 gap_opening_penalty=1,
                 gap_extension_penalty=1,
                 similarity_function="identity",
                 masking_a=None):
        assert style in ["global", "local", "no_end_gaps"]
        sim_fun_str = similarity_function
        self.similarity_function_call = None
        if (similarity_function is None or similarity_function == "identity"):
            self.similarity_function_call = identity
        elif (similarity_function == "dayhoff"):
            self.similarity_function_call = dayhoff
        elif (similarity_function == "blosum50"):
            self.similarity_function_call = blosum50
        elif (isinstance(similarity_function, str)):
            raise RuntimeError('Unknown similarity_function: "%s"' %
                               similarity_function)
        from six import string_types
        if isinstance(seq_a, string_types):
            seq_a = seq_a.upper()
            seq_b = seq_b.upper()
        else:
            seq_a = flex.std_string(seq_a)
            seq_b = flex.std_string(seq_b)

        if masking_a:  #  Gap penalty for insertion scaled by masking_a after
            #   corresponding position in sequence a and scaled by
            #   masking_a for deletion before corresponding position in
            #   sequence a.  Allows increasing mask everywhere
            #   except where you want a gap to occur
            assert len(list(masking_a)) == len(seq_a)
        else:
            masking_a = [1] * len(
                seq_a)  #  no masking; standard gap penalty everywhere
        m = flex.float(masking_a)
        super(align, self).__init__(
            seq_a=seq_a,
            seq_b=seq_b,
            masking=m,
            style=style,
            gap_opening_penalty=gap_opening_penalty,
            gap_extension_penalty=gap_extension_penalty,
            similarity_function=sim_fun_str,
        )
        self.seq_a = seq_a
        self.seq_b = seq_b
        self.style = style
        self.similarity_function = sim_fun_str
        m, n = self.m, self.n = len(seq_a), len(seq_b)
示例#10
0
文件: run.py 项目: ryan-dai/recviewer
def main(filenames,
         map_file,
         npoints=192,
         max_resolution=6,
         reverse_phi=False):
    rec_range = 1 / max_resolution

    image = ImageFactory(filenames[0])
    panel = image.get_detector()[0]
    beam = image.get_beam()
    s0 = beam.get_s0()
    pixel_size = panel.get_pixel_size()

    xlim, ylim = image.get_raw_data().all()

    xy = recviewer.get_target_pixels(panel, s0, xlim, ylim, max_resolution)

    s1 = panel.get_lab_coord(xy * pixel_size[0])  # FIXME: assumed square pixel
    s1 = s1 / s1.norms() * (1 / beam.get_wavelength())  # / is not supported...
    S = s1 - s0

    grid = flex.double(flex.grid(npoints, npoints, npoints), 0)
    cnts = flex.int(flex.grid(npoints, npoints, npoints), 0)

    for filename in filenames:
        print "Processing image", filename
        try:
            fill_voxels(ImageFactory(filename), grid, cnts, S, xy, reverse_phi,
                        rec_range)
        except:
            print " Failed to process. Skipped this."

    recviewer.normalize_voxels(grid, cnts)

    uc = uctbx.unit_cell((npoints, npoints, npoints, 90, 90, 90))
    ccp4_map.write_ccp4_map(map_file, uc, sgtbx.space_group("P1"), (0, 0, 0),
                            grid.all(), grid,
                            flex.std_string(["cctbx.miller.fft_map"]))
    return
    from scitbx import fftpack
    fft = fftpack.complex_to_complex_3d(grid.all())
    grid_complex = flex.complex_double(reals=flex.pow2(grid),
                                       imags=flex.double(grid.size(), 0))
    grid_transformed = flex.abs(fft.backward(grid_complex))
    print flex.max(grid_transformed), flex.min(
        grid_transformed), grid_transformed.all()
    ccp4_map.write_ccp4_map(map_file, uc, sgtbx.space_group("P1"), (0, 0, 0),
                            grid.all(), grid_transformed,
                            flex.std_string(["cctbx.miller.fft_map"]))
示例#11
0
 def update_structure (self, pdb_hierarchy, atomic_bonds,
     special_position_settings=None) :
   from scitbx.array_family import flex
   self.pdb_hierarchy = pdb_hierarchy
   self.atoms = pdb_hierarchy.atoms()
   self.atom_count = self.atoms.size()
   assert (self.atom_count == len(atomic_bonds))
   if atomic_bonds is None :
     atomic_bonds = flex.stl_set_unsigned(self.atom_count)
   self.atomic_bonds = atomic_bonds
   self.selection_cache = pdb_hierarchy.atom_selection_cache(
     special_position_settings=special_position_settings)
   #self.index_atoms()
   atom_index = []
   atom_labels = flex.std_string()
   for atom in self.pdb_hierarchy.atoms_with_labels() :
     atom_index.append(atom)
     atom_labels.append(format_atom_label(atom))
   self.atom_index = atom_index
   self.atom_labels = atom_labels
   self.trace_bonds = extract_trace(pdb_hierarchy, self.selection_cache)
   if self.draw_mode is None or self.draw_mode.startswith("trace") :
     self.current_bonds = self.trace_bonds
   else :
     self.current_bonds = self.atomic_bonds
   atom_radii = flex.double(self.atoms.size(), 1.5)
   hydrogen_flag = flex.bool(self.atoms.size(), False)
   for i_seq, atom in enumerate(self.atom_index) :
     if atom.element.strip() in ["H", "D"] :
       atom_radii[i_seq] = 0.75
       hydrogen_flag[i_seq] = True
   self.atom_radii = atom_radii
   self.hydrogen_flag = hydrogen_flag
   self._color_cache = {}
   self.is_changed = True
示例#12
0
def write_ccp4_map(map_data, unit_cell, space_group, file_name):
  iotbx.mrcfile.write_ccp4_map(
    file_name      = file_name,
    unit_cell      = unit_cell,
    space_group    = space_group,
    map_data       = map_data.as_double(),
    labels=flex.std_string([" "]))
示例#13
0
  def write_real_map_file(self, filename, unit_cell, space_group,
                          map_data, labels, overwrite=False):
    # WAS: wrapper for iotbx.ccp4_map.write_ccp4_map
    # NOW: moved to mrcfile (https://github.com/ccpem/mrcfile)
    if (os.path.isfile(filename) and (not overwrite)):
      raise Sorry('%s already exists and overwrite is set to %s.' %
                  (filename, overwrite))
    import iotbx.mrcfile

    # check labels (maybe other arugments?)
    if (not isinstance(labels, flex.std_string)):
      try:
        labels = flex.std_string(labels)
      except Exception as err:
        # trap Boost.Python.ArgumentError
        if (str(err).startswith('Python argument types in')):
          raise Sorry('A list of strings is required for the "labels" argument')
        else:
          raise

    try:
      iotbx.mrcfile.write_ccp4_map(
        file_name = filename,
        unit_cell = unit_cell,
        space_group = space_group,
        map_data = map_data,
        labels = labels
      )
    except IOError as err:
      raise Sorry('There was an error with writing %s.\n%s' %
                  (filename, err))

    self._output_files.append(filename)
    self._output_types.append(RealMapDataManager.datatype)
示例#14
0
def exercise_00():
  d = iaa.residue_dict()
  assert len(d.keys()) == 44
  for aac in iotbx.pdb.amino_acid_codes.one_letter_given_three_letter:
    assert aac.lower() in d.keys()
  #
  mon_lib_srv = monomer_library.server.server()
  ener_lib    = monomer_library.server.ener_lib()
  for aac in iotbx.pdb.amino_acid_codes.one_letter_given_three_letter:
    aac = aac.lower()
    for aac_ in [aac, aac+"_h"]:
      residue_as_string = iaa.__dict__[aac_]
      rs = flex.std_string(residue_as_string.splitlines())
      processed_pdb_file = monomer_library.pdb_interpretation.process(
         mon_lib_srv = mon_lib_srv,
         ener_lib    = ener_lib,
         raw_records = rs)
      sites_cart = processed_pdb_file.xray_structure().sites_cart()
      grm = processed_pdb_file.geometry_restraints_manager(
        show_energies = False, plain_pairs_radius = 5.0)
      es = grm.energies_sites(
        sites_cart = sites_cart)
      b = es.bond_deviations()
      a = es.angle_deviations()
      b_z = es.bond_deviations_z()
      a_z = es.angle_deviations_z()
      print "%5s"%aac_, "bonds     : %5.3f %5.3f %5.3f"%b, \
        "angles     : %5.3f %5.3f %5.3f"%a
      assert a[2] < 1.2, a[2]
      assert b[2] < 0.005, b[2]
      print "%5s"%aac_, "bonds rmsZ: %5.3f %5.3f %5.3f"%b_z, \
        "angles rmsZ: %5.3f %5.3f %5.3f"%a_z
      assert a_z[2] < 0.7, a_z[2]
      assert b_z[2] < 0.7, b_z[2]
示例#15
0
def run(args):
    show_citation()
    if len(args) != 1:
        raise Sorry("Need to provide CCP4 formatted map file.")
    # map
    try:
        ccp4_map = iotbx.ccp4_map.map_reader(file_name=args[0])
    except Exception:  # XXX should probably be RuntimeError?
        raise Sorry("Not a valid file (provide CCP4 formatted map file).")
    cs = crystal.symmetry(ccp4_map.unit_cell().parameters(), ccp4_map.space_group_number)
    m = ccp4_map.data.as_double()
    # show general statistics
    show_overall_statistics(m=m, header="Map basic info (%s):" % args[0])
    # HE
    m_he = maptbx.volume_scale(map=m, n_bins=10000).map_data()
    show_overall_statistics(m=m_he, header="Rank-scaled (HE) map info:")
    #
    iotbx.ccp4_map.write_ccp4_map(
        file_name=args[0] + "_rank_scaled.ccp4",
        unit_cell=cs.unit_cell(),
        space_group=cs.space_group(),
        # gridding_first=(0,0,0),# This causes a bug (map gets shifted)
        # gridding_last=n_real,  # This causes a bug (map gets shifted)
        map_data=m_he,
        labels=flex.std_string([""]),
    )
  def _goniometer(self):
    '''Return a model for a simple single-axis goniometer. This should
    probably be checked against the image header, though for miniCBF
    there are limited options for this.'''

    if 'Phi' in self._cif_header_dictionary:
      phi_value = float(self._cif_header_dictionary['Phi'].split()[0])
    else:
      phi_value = 0.0

    if 'Kappa' in self._cif_header_dictionary:
      kappa_value = float(self._cif_header_dictionary['Kappa'].split()[0])
    else:
      kappa_value = 0.0

    if 'Omega' in self._cif_header_dictionary:
      omega_value = float(self._cif_header_dictionary['Omega'].split()[0])
    else:
      omega_value = 0.0

    from scitbx import matrix
    from scitbx.array_family import flex
    phi = (1.0, 0.0, 0.0)
    kappa = (0.914, 0.279, -0.297)
    omega = (1.0, 0.0, 0.0)
    axes = flex.vec3_double((phi, kappa, omega))
    angles = flex.double((phi_value, kappa_value, omega_value))
    names = flex.std_string(("GON_PHI", "GON_KAPPA", "GON_OMEGA"))
    return self._goniometer_factory.make_multi_axis_goniometer(
      axes, angles, names, scan_axis=2)
def tst_hdf5(filename):
    from dxtbx.format.image import HDF5Reader
    from dxtbx.format.nexus import dataset_as_flex_int
    from scitbx.array_family import flex
    import h5py

    handle = h5py.File(filename, "r")

    reader = HDF5Reader(handle.id.id, flex.std_string(["/entry/data/data"]))

    image = reader.image(0)

    data1 = image.as_int().tile(0).data()

    dataset = handle['/entry/data/data']
    N, height, width = dataset.shape
    data2 = dataset_as_flex_int(
        dataset.id.id,
        (slice(0, 1, 1), slice(0, height, 1), slice(0, width, 1)))
    data2.reshape(flex.grid(data2.all()[1:]))

    assert N == len(reader)
    assert data1.all()[0] == data2.all()[0]
    assert data1.all()[1] == data2.all()[1]
    diff = flex.abs(data1 - data2)
    assert flex.max(diff) < 1e-7

    print 'OK'
示例#18
0
def run(args):
    show_citation()
    if (len(args) != 1):
        raise Sorry("Need to provide CCP4 formatted map file.")
    # map
    try:
        ccp4_map = iotbx.mrcfile.map_reader(file_name=args[0])
    except Exception:  # XXX should probably be RuntimeError?
        raise Sorry("Not a valid file (provide CCP4 formatted map file).")
    cs = crystal.symmetry(ccp4_map.unit_cell().parameters(),
                          ccp4_map.space_group_number)
    m = ccp4_map.data.as_double()
    # show general statistics
    show_overall_statistics(m=m, header="Map basic info (%s):" % args[0])
    # HE
    m_he = maptbx.volume_scale(map=m, n_bins=10000).map_data()
    show_overall_statistics(m=m_he, header="Rank-scaled (HE) map info:")
    #
    iotbx.mrcfile.write_ccp4_map(
        file_name=args[0] + "_rank_scaled.ccp4",
        unit_cell=cs.unit_cell(),
        space_group=cs.space_group(),
        #gridding_first=(0,0,0),# This causes a bug (map gets shifted)
        #gridding_last=n_real,  # This causes a bug (map gets shifted)
        map_data=m_he,
        labels=flex.std_string([""]))
示例#19
0
def write_ccp4_map(map_data, cs, file_name):
    from iotbx import mrcfile
    mrcfile.write_ccp4_map(file_name=file_name,
                           unit_cell=cs.unit_cell(),
                           space_group=cs.space_group(),
                           map_data=map_data,
                           labels=flex.std_string([""]))
示例#20
0
def get_pdb_hierarchy(file_names):
    assert 0, "Hopefully is not used"
    pdb_combined = iotbx.pdb.combine_unique_pdb_files(file_names=file_names)
    pdb_structure = iotbx.pdb.input(source_info=None,
                                    lines=flex.std_string(
                                        pdb_combined.raw_records))
    return pdb_structure.construct_hierarchy()
示例#21
0
    def format_column(key, data, format_strings=None):
        if isinstance(data, flex.vec3_double):
            c_strings = [
                c.as_string(format_strings[i].strip())
                for i, c in enumerate(data.parts())
            ]
        elif isinstance(data, flex.miller_index):
            c_strings = [
                c.as_string(format_strings[i].strip())
                for i, c in enumerate(data.as_vec3_double().parts())
            ]
        elif isinstance(data, flex.size_t):
            c_strings = [data.as_int().as_string(format_strings[0].strip())]
        elif isinstance(data, flex.shoebox):
            x1, x2, y1, y2, z1, z2 = data.bounding_boxes().parts()
            bbox_sizes = ((z2 - z1) * (y2 - y1) * (x2 - x1)).as_double()
            c_strings = [bbox_sizes.as_string(format_strings[0].strip())]
            key += " (N pix)"
        else:
            c_strings = [data.as_string(format_strings[0].strip())]

        column = flex.std_string()
        max_element_lengths = [c.max_element_length() for c in c_strings]
        for i in range(len(c_strings[0])):

            column.append(
                ("%%%is" % len(key))
                % ", ".join(
                    ("%%%is" % max_element_lengths[j]) % c_strings[j][i]
                    for j in range(len(c_strings))
                )
            )
        return column
示例#22
0
    def write_array_as_map(self, array, f_name, origin_shift=True):
        """Take array of values and write as map the shape of the grid"""

        # Convert from numpy array is necessary
        if isinstance(array, numpy.ndarray):
            array = array.astype(float).flatten()
        else:
            array = list(array)
        # Convert to flex.double and shape
        array = flex.double(array)
        array.reshape(self.indexer())
        # If origin, apply shift to map
        if origin_shift is True:
            array = cctbx.maptbx.rotate_translate_map(
                unit_cell=self.unit_cell(),
                map_data=array,
                rotation_matrix=scitbx.matrix.rec([1, 0, 0, 0, 1, 0, 0, 0, 1],
                                                  (3, 3)).elems,
                translation_vector=(-1.0 *
                                    scitbx.matrix.rec(self.cart_origin(),
                                                      (3, 1))).elems)
        # Write the map
        iotbx.ccp4_map.write_ccp4_map(file_name=f_name,
                                      unit_cell=self.unit_cell(),
                                      space_group=self.space_group(),
                                      map_data=array,
                                      labels=flex.std_string(['']))
示例#23
0
def ccp4_map(crystal_symmetry, file_name, map_data):
    from iotbx import mrcfile
    mrcfile.write_ccp4_map(file_name=file_name,
                           unit_cell=crystal_symmetry.unit_cell(),
                           space_group=crystal_symmetry.space_group(),
                           map_data=map_data,
                           labels=flex.std_string([""]))
示例#24
0
def test_hdf5(dials_regression, hdf5_image):
    h5py = pytest.importorskip("h5py")
    # Import after we know h5py is present
    from dxtbx.format.nexus import dataset_as_flex_int

    filename = os.path.join(dials_regression, hdf5_image)
    handle = h5py.File(filename, "r")

    reader = HDF5Reader(handle.id.id, flex.std_string(["/entry/data/data"]))

    image = reader.image(0)

    data1 = image.as_int().tile(0).data()

    dataset = handle["/entry/data/data"]
    N, height, width = dataset.shape
    data2 = dataset_as_flex_int(
        dataset.id.id,
        (slice(0, 1, 1), slice(0, height, 1), slice(0, width, 1)))
    data2.reshape(flex.grid(data2.all()[1:]))

    assert N == len(reader)
    assert data1.all()[0] == data2.all()[0]
    assert data1.all()[1] == data2.all()[1]
    diff = flex.abs(data1 - data2)
    assert flex.max(diff) < 1e-7
示例#25
0
    def make_kappa_goniometer(alpha, omega, kappa, phi, direction, scan_axis):
        omega_axis = (1, 0, 0)
        phi_axis = (1, 0, 0)

        c = math.cos(alpha * math.pi / 180)
        s = math.sin(alpha * math.pi / 180)
        if direction == "+y":
            kappa_axis = (c, s, 0.0)
        elif direction == "+z":
            kappa_axis = (c, 0.0, s)
        elif direction == "-y":
            kappa_axis = (c, -s, 0.0)
        elif direction == "-z":
            kappa_axis = (c, 0.0, -s)
        else:
            raise RuntimeError("Invalid direction")

        if scan_axis == "phi":
            scan_axis = 0
        else:
            scan_axis = 2

        axes = flex.vec3_double((phi_axis, kappa_axis, omega_axis))
        angles = flex.double((phi, kappa, omega))
        names = flex.std_string(("PHI", "KAPPA", "OMEGA"))
        return GoniometerFactory.make_multi_axis_goniometer(
            axes, angles, names, scan_axis)
    def _goniometer(self):
        '''Return a model for a simple single-axis goniometer. This should
    probably be checked against the image header, though for miniCBF
    there are limited options for this.'''

        if 'Phi' in self._cif_header_dictionary:
            phi_value = float(self._cif_header_dictionary['Phi'].split()[0])
        else:
            phi_value = 0.0

        if 'Kappa' in self._cif_header_dictionary:
            kappa_value = float(
                self._cif_header_dictionary['Kappa'].split()[0])
        else:
            kappa_value = 0.0

        if 'Omega' in self._cif_header_dictionary:
            omega_value = float(
                self._cif_header_dictionary['Omega'].split()[0])
        else:
            omega_value = 0.0

        from scitbx import matrix
        from scitbx.array_family import flex
        phi = (1.0, 0.0, 0.0)
        kappa = (0.914, 0.279, -0.297)
        omega = (1.0, 0.0, 0.0)
        axes = flex.vec3_double((phi, kappa, omega))
        angles = flex.double((phi_value, kappa_value, omega_value))
        names = flex.std_string(("GON_PHI", "GON_KAPPA", "GON_OMEGA"))
        return self._goniometer_factory.make_multi_axis_goniometer(axes,
                                                                   angles,
                                                                   names,
                                                                   scan_axis=2)
示例#27
0
def exercise_00():
    d = iaa.residue_dict()
    assert len(d) == 48
    for aac in iotbx.pdb.amino_acid_codes.one_letter_given_three_letter:
        assert aac.lower() in d
    #
    mon_lib_srv = monomer_library.server.server()
    ener_lib = monomer_library.server.ener_lib()
    for aac in iotbx.pdb.amino_acid_codes.one_letter_given_three_letter:
        aac = aac.lower()
        for aac_ in [aac, aac + "_h"]:
            residue_as_string = iaa.__dict__[aac_]
            rs = flex.std_string(residue_as_string.splitlines())
            processed_pdb_file = monomer_library.pdb_interpretation.process(
                mon_lib_srv=mon_lib_srv, ener_lib=ener_lib, raw_records=rs)
            sites_cart = processed_pdb_file.xray_structure().sites_cart()
            grm = processed_pdb_file.geometry_restraints_manager(
                show_energies=False, plain_pairs_radius=5.0)
            es = grm.energies_sites(sites_cart=sites_cart)
            b = es.bond_deviations()
            a = es.angle_deviations()
            b_z = es.bond_deviations_z()
            a_z = es.angle_deviations_z()
            print("%5s"%aac_, "bonds     : %5.3f %5.3f %5.3f"%b, \
              "angles     : %5.3f %5.3f %5.3f"%a)
            assert a[2] < 1.2, a[2]
            assert b[2] < 0.005, b[2]
            print("%5s"%aac_, "bonds rmsZ: %5.3f %5.3f %5.3f"%b_z, \
              "angles rmsZ: %5.3f %5.3f %5.3f"%a_z)
            assert a_z[2] < 0.7, a_z[2]
            assert b_z[2] < 0.7, b_z[2]
示例#28
0
def write_ccp4_map(sites_cart,
                   unit_cell,
                   map_data,
                   n_real,
                   file_name,
                   buffer=10):
    import iotbx.ccp4_map
    from cctbx import sgtbx
    from scitbx.array_family import flex
    if sites_cart is not None:
        frac_min, frac_max = unit_cell.box_frac_around_sites(
            sites_cart=sites_cart, buffer=buffer)
    else:
        frac_min, frac_max = (0.0, 0.0, 0.0), (1.0, 1.0, 1.0)
    gridding_first = tuple([ifloor(f * n) for f, n in zip(frac_min, n_real)])
    gridding_last = tuple([iceil(f * n) for f, n in zip(frac_max, n_real)])
    space_group = sgtbx.space_group_info("P1").group()
    iotbx.ccp4_map.write_ccp4_map(
        file_name=file_name,
        unit_cell=unit_cell,
        space_group=space_group,
        gridding_first=gridding_first,
        gridding_last=gridding_last,
        map_data=map_data,
        labels=flex.std_string(["iotbx.map_conversion.write_ccp4_map_box"]))
示例#29
0
def run(args, log=sys.stdout):
  # print "args", args

  inputs = mmtbx.utils.process_command_line_args(args=args,
      master_params=master_phil)
  work_params = inputs.params.extract()
  inputs.params.show(prefix=" ", out=log)
  pdb_file_names = list(inputs.pdb_file_names)
  if len(pdb_file_names) == 0:
    raise Sorry("No PDB file specified")
  work_params.loop_idealization.enabled=True
  work_params.loop_idealization.number_of_ccd_trials=1
  work_params.loop_idealization.minimize_whole=False
  work_params.loop_idealization.variant_search_level=1
  # print work_params.loop_idealization.output_prefix
  # STOP()
  # work_params.ss_idealization.file_name_before_regularization="before.pdb"
  pdb_combined = iotbx.pdb.combine_unique_pdb_files(file_names=pdb_file_names)
  pdb_input = iotbx.pdb.input(source_info=None,
    lines=flex.std_string(pdb_combined.raw_records))
  pdb_h = pdb_input.construct_hierarchy()


  loop_ideal = loop_idealization(
      pdb_hierarchy=pdb_h,
      params=work_params.loop_idealization,
      log=log)
  loop_ideal.resulting_pdb_h.write_pdb_file(
      file_name="%s_very_final.pdb" % work_params.loop_idealization.output_prefix)
  print >> log, "Outlier percentages: initial, after ccd, after minimization, berkeley after ccd, berkeley after minimization:"
  print >> log, loop_ideal.p_initial_rama_outliers,
  print >> log, loop_ideal.p_before_minimization_rama_outliers,
  print >> log, loop_ideal.p_after_minimiaztion_rama_outliers,
  print >> log, loop_ideal.berkeley_p_before_minimization_rama_outliers,
  print >> log, loop_ideal.berkeley_p_after_minimiaztion_rama_outliers
    def _goniometer(self):
        """Return a model for a simple single-axis goniometer. This should
        probably be checked against the image header, though for miniCBF
        there are limited options for this."""

        if "Phi" in self._cif_header_dictionary:
            phi_value = float(self._cif_header_dictionary["Phi"].split()[0])
        else:
            phi_value = 0.0

        if "Kappa" in self._cif_header_dictionary:
            kappa_value = float(
                self._cif_header_dictionary["Kappa"].split()[0])
        else:
            kappa_value = 0.0

        if "Omega" in self._cif_header_dictionary:
            omega_value = float(
                self._cif_header_dictionary["Omega"].split()[0])
        else:
            omega_value = 0.0

        phi = (1.0, 0.0, 0.0)
        kappa = (0.914, 0.279, -0.297)
        omega = (1.0, 0.0, 0.0)
        axes = flex.vec3_double((phi, kappa, omega))
        angles = flex.double((phi_value, kappa_value, omega_value))
        names = flex.std_string(("GON_PHI", "GON_KAPPA", "GON_OMEGA"))
        return self._goniometer_factory.make_multi_axis_goniometer(axes,
                                                                   angles,
                                                                   names,
                                                                   scan_axis=2)
示例#31
0
 def prepare_user_map(self):
     print >> self.log, "Preparing user map..."
     self.map_shift_manager = mmtbx.utils.shift_origin(
         map_data=self.user_supplied_map,
         xray_structure=self.model.get_xray_structure(),
         crystal_symmetry=self.cs)
     if (self.map_shift_manager.shift_cart is not None):
         # Need to figure out way to save the shift to shift back
         # and apply it to whole_pdb, master_pdb, etc. Don't forget about
         # boxing hierarchy when symmetry is not available or corrupted...
         raise Sorry(
             "Map origin is not at (0,0,0). This is not implemented for model_idealization"
         )
     map_data = self.map_shift_manager.map_data
     self.reference_map = map_data
     self.master_map = self.reference_map.deep_copy()
     if self.model.ncs_constraints_present():
         mask = maptbx.mask(
             xray_structure=self.model.get_xray_structure().select(
                 self.model.get_master_selection()),
             n_real=self.master_map.focus(),
             mask_value_inside_molecule=1,
             mask_value_outside_molecule=-1,
             solvent_radius=0,
             atom_radius=1.)
         self.master_map = self.reference_map * mask
         if self.params.debug:
             iotbx.ccp4_map.write_ccp4_map(
                 file_name="%s_3_master.map" % self.params.output_prefix,
                 unit_cell=self.cs.unit_cell(),
                 space_group=self.cs.space_group(),
                 map_data=self.master_map,
                 labels=flex.std_string([""]))
         self.master_map = map_data
示例#32
0
def get_inputs(args, log, master_params):
    """
  Eventually, this will be centralized.
  """
    cmdline = process_command_line_with_files(args=args,
                                              master_phil=master_params,
                                              pdb_file_def='model_file_name')
    params = cmdline.work.extract()
    # Model
    file_names = params.model_file_name
    pdb_combined = combine_unique_pdb_files(file_names=file_names)
    pdb_inp = iotbx.pdb.input(source_info=None,
                              lines=flex.std_string(pdb_combined.raw_records),
                              raise_sorry_if_format_error=True)
    # Crystal symmetry
    fake_crystal_symmetry = False
    crystal_symmetry = pdb_inp.crystal_symmetry()
    if (crystal_symmetry is None or crystal_symmetry.is_empty()
            or crystal_symmetry.is_nonsence()):
        fake_crystal_symmetry = True
        from cctbx import uctbx
        crystal_symmetry = \
          uctbx.non_crystallographic_unit_cell_with_the_sites_in_its_center(
            sites_cart=pdb_inp.atoms().extract_xyz(),
            buffer_layer=5).crystal_symmetry()
    #
    model = mmtbx.model.manager(model_input=pdb_inp,
                                crystal_symmetry=crystal_symmetry)
    #
    return group_args(params=params,
                      pdb_file_names=file_names,
                      model=model,
                      fake_crystal_symmetry=fake_crystal_symmetry)
示例#33
0
  def make_kappa_goniometer(alpha, omega, kappa, phi, direction, scan_axis):
    import math

    omega_axis = (1, 0, 0)
    phi_axis = (1, 0, 0)

    c = math.cos(alpha * math.pi / 180);
    s = math.sin(alpha * math.pi / 180);
    if direction == "+y":
      kappa_axis = (c, s, 0.0)
    elif direction == "+z":
      kappa_axis = (c, 0.0, s)
    elif direction == "-y":
      kappa_axis = (c, -s, 0.0)
    elif direction == "-z":
      kappa_axis = (c, 0.0, -s)
    else:
      raise RuntimeError("Invalid direction")

    if scan_axis == "phi":
      scan_axis = 0
    else:
      scan_axis = 2

    from scitbx.array_family import flex
    axes = flex.vec3_double((phi_axis, kappa_axis, omega_axis))
    angles = flex.double((phi, kappa, omega))
    names = flex.std_string(("PHI", "KAPPA", "OMEGA"))
    return goniometer_factory.make_multi_axis_goniometer(
      axes, angles, names, scan_axis)
示例#34
0
 def to_file(self, filename, space_group):
     map_data = self.get_map_data(sparse=False)
     iotbx.ccp4_map.write_ccp4_map(
                 file_name   = filename,
                 unit_cell   = self.unit_cell,
                 space_group = space_group,
                 map_data    = self.embed(map_data),
                 labels      = flex.std_string(['Output map from giant/pandda'])     )
示例#35
0
def write_ccp4_map(map_data, cs, file_name):
  from iotbx import ccp4_map
  ccp4_map.write_ccp4_map(
    file_name=file_name,
    unit_cell=cs.unit_cell(),
    space_group=cs.space_group(),
    map_data=map_data,
    labels=flex.std_string([""]))
def run(args, log = sys.stdout):
  if(len(args)==0):
    print >> log, legend
    defaults(log=log)
    return
  #
  parsed = defaults(log=log)
  processed_args = mmtbx.utils.process_command_line_args(args = args,
    log = sys.stdout, master_params = parsed)
  params = processed_args.params.extract()
  unit_cell = processed_args.crystal_symmetry.unit_cell()
  reflection_files = processed_args.reflection_files
  #
  atoms_with_labels = None
  if(len(processed_args.pdb_file_names)==1):
    pdb_combined = combine_unique_pdb_files(
      file_names=processed_args.pdb_file_names)
    pdb_combined.report_non_unique()
    pdb_inp = iotbx.pdb.input(source_info = None,
      lines = flex.std_string(pdb_combined.raw_records))
    atoms_with_labels = pdb_inp.atoms_with_labels()
  if(len(params.point)==0 and atoms_with_labels is None):
    raise Sorry("No points given to compute map value at.")

  if(len(reflection_files) == 0 and processed_args.ccp4_map is None):
    raise Sorry("No reflection or map files found.")

  if(len(reflection_files) > 1):
    raise Sorry("More than one reflection file found.")
  crystal_symmetry = processed_args.crystal_symmetry
  if(crystal_symmetry is None):
    raise Sorry("No crystal symmetry found.")
  if(len(reflection_files) != 0):
    map_3d = map_from_reflection_file(reflection_files=reflection_files, params=params)
  else:
    map_3d = processed_args.ccp4_map.data.as_double()
  print "Map values at specified points:"
  for point in params.point:
    point_frac = unit_cell.fractionalize(point)
    point_formatted = ",".join([str("%10.3f"%p).strip() for p in point])
    point_frac_formatted = \
      ",".join([str("%10.3f"%p).strip() for p in point_frac])
    map_value = str(
      "%10.3f"%map_3d.eight_point_interpolation(point_frac)).strip()
    print "  Input point: (%s) Fractionalized: (%s) Map value: %s"%(
      point_formatted, point_frac_formatted, map_value)
  #
  if(atoms_with_labels is not None):
    for point in atoms_with_labels:
      point_frac = processed_args.crystal_symmetry.unit_cell().fractionalize(point.xyz)
      point_formatted = ",".join([str("%8.3f"%p) for p in point.xyz])
      map_value = str(
        "%10.3f"%map_3d.eight_point_interpolation(point_frac)).strip()
      print point.quote(), "Point: %s Map value: %s"%(point_formatted,map_value)
  #
  print
  print "All done."
def get_map_from_hkl(hkl_file_object, params, xrs, log):
  print("Processing input hkl file...", file=log)
  crystal_symmetry = hkl_file_object.crystal_symmetry()
  rfs = reflection_file_utils.reflection_file_server(
    crystal_symmetry = crystal_symmetry,
    force_symmetry   = True,
    reflection_files = [hkl_file_object.file_content],
    err              = StringIO())


  parameters = mmtbx.utils.data_and_flags_master_params().extract()
  if (params.data_labels is not None):
    parameters.labels = params.data_labels
  if (params.r_free_flags_labels is not None):
    parameters.r_free_flags.label = params.r_free_flags_labels
  determined_data_and_flags = mmtbx.utils.determine_data_and_flags(
    reflection_file_server = rfs,
    parameters             = parameters,
    keep_going             = True,
    working_point_group = crystal_symmetry.space_group().build_derived_point_group(),
    log                    = StringIO(),
    symmetry_safety_check  = True)
  f_obs = determined_data_and_flags.f_obs

  if (params.data_labels is None):
    params.data_labels = f_obs.info().label_string()
  r_free_flags = determined_data_and_flags.r_free_flags
  assert f_obs is not None
  print("Input data:", file=log)
  print("  Iobs or Fobs:", f_obs.info().labels, file=log)
  if (r_free_flags is not None):
    print("  Free-R flags:", r_free_flags.info().labels, file=log)
    params.r_free_flags_labels = r_free_flags.info().label_string()
  else:
    print("  Free-R flags: Not present", file=log)

  fmodel = mmtbx.f_model.manager(
      f_obs        = f_obs,
      r_free_flags = r_free_flags,
      xray_structure = xrs)
  fmodel.update_all_scales()

  fft_map = fmodel.electron_density_map().fft_map(
    resolution_factor = 0.25,
    map_type          = "2mFo-DFc",
    use_all_data      = False) # Exclude free reflections
  fft_map.apply_sigma_scaling()
  map_data = fft_map.real_map_unpadded(in_place=False)
  if params.debug:
    fft_map.as_xplor_map(file_name="%s_21.map" % params.output_prefix)
    iotbx.mrcfile.write_ccp4_map(
        file_name="%s_21.ccp4" % params.output_prefix,
        unit_cell=crystal_symmetry.unit_cell(),
        space_group=crystal_symmetry.space_group(),
        map_data=map_data,
        labels=flex.std_string([""]))
  return map_data, crystal_symmetry
def get_pdb_inputs(pdb_str):
    raw_records = flex.std_string(pdb_str.splitlines())
    processed_pdb_file = rs.get_processed_pdb_object(raw_records=raw_records, rama_potential=None, log=None)
    xrs = processed_pdb_file.xray_structure(show_summary=False)
    geometry_restraints_manager = rs.get_geometry_restraints_manager(
        processed_pdb_file=processed_pdb_file, xray_structure=xrs
    )
    pdb_hierarchy = processed_pdb_file.all_chain_proxies.pdb_hierarchy
    return group_args(ph=pdb_hierarchy, grm=geometry_restraints_manager, xrs=xrs)
示例#39
0
def run(args, log = sys.stdout):
  if(len(args)==0):
    print(legend, file=log)
    defaults(log=log)
    return
  #
  parsed = defaults(log=log)
  processed_args = mmtbx.utils.process_command_line_args(args = args,
    log = sys.stdout, master_params = parsed)
  params = processed_args.params.extract()
  unit_cell = processed_args.crystal_symmetry.unit_cell()
  reflection_files = processed_args.reflection_files
  #
  atoms_with_labels = None
  if(len(processed_args.pdb_file_names)==1):
    pdb_combined = combine_unique_pdb_files(
      file_names=processed_args.pdb_file_names)
    pdb_combined.report_non_unique()
    pdb_inp = iotbx.pdb.input(source_info = None,
      lines = flex.std_string(pdb_combined.raw_records))
    atoms_with_labels = pdb_inp.atoms_with_labels()
  if(len(params.point)==0 and atoms_with_labels is None):
    raise Sorry("No points given to compute map value at.")

  if(len(reflection_files) == 0 and processed_args.ccp4_map is None):
    raise Sorry("No reflection or map files found.")

  if(len(reflection_files) > 1):
    raise Sorry("More than one reflection file found.")
  crystal_symmetry = processed_args.crystal_symmetry
  if(crystal_symmetry is None):
    raise Sorry("No crystal symmetry found.")
  if(len(reflection_files) != 0):
    map_3d = map_from_reflection_file(reflection_files=reflection_files, params=params)
  else:
    map_3d = processed_args.ccp4_map.map_data()
  print("Map values at specified points:")
  for point in params.point:
    point_frac = unit_cell.fractionalize(point)
    point_formatted = ",".join([str("%10.3f"%p).strip() for p in point])
    point_frac_formatted = \
      ",".join([str("%10.3f"%p).strip() for p in point_frac])
    map_value = str(
      "%10.3f"%map_3d.eight_point_interpolation(point_frac)).strip()
    print("  Input point: (%s) Fractionalized: (%s) Map value: %s"%(
      point_formatted, point_frac_formatted, map_value))
  #
  if(atoms_with_labels is not None):
    for point in atoms_with_labels:
      point_frac = processed_args.crystal_symmetry.unit_cell().fractionalize(point.xyz)
      point_formatted = ",".join([str("%8.3f"%p) for p in point.xyz])
      map_value = str(
        "%10.3f"%map_3d.eight_point_interpolation(point_frac)).strip()
      print(point.quote(), "Point: %s Map value: %s"%(point_formatted,map_value))
  #
  print()
  print("All done.")
示例#40
0
def main(filenames, map_file, npoints=192, max_resolution=6, reverse_phi=False):
    rec_range = 1 / max_resolution

    image = ImageFactory(filenames[0])
    panel = image.get_detector()[0]
    beam = image.get_beam()
    s0 = beam.get_s0()
    pixel_size = panel.get_pixel_size()
    
    xlim, ylim = image.get_raw_data().all()
    
    xy = recviewer.get_target_pixels(panel, s0, xlim, ylim, max_resolution)
    
    s1 = panel.get_lab_coord(xy * pixel_size[0]) # FIXME: assumed square pixel
    s1 = s1 / s1.norms() * (1 / beam.get_wavelength()) # / is not supported...
    S = s1 - s0
    
    grid = flex.double(flex.grid(npoints, npoints, npoints), 0)
    cnts = flex.int(flex.grid(npoints, npoints, npoints), 0)
    
    for filename in filenames:
        print "Processing image", filename
        try:
            fill_voxels(ImageFactory(filename), grid, cnts, S, xy, reverse_phi, rec_range)
        except:
            print " Failed to process. Skipped this."
        
    recviewer.normalize_voxels(grid, cnts)
    
    uc = uctbx.unit_cell((npoints, npoints, npoints, 90, 90, 90))
    ccp4_map.write_ccp4_map(map_file, uc, sgtbx.space_group("P1"), 
                            (0, 0, 0), grid.all(), grid, 
                            flex.std_string(["cctbx.miller.fft_map"]))
    return
    from scitbx import fftpack
    fft = fftpack.complex_to_complex_3d(grid.all())
    grid_complex = flex.complex_double(
                            reals=flex.pow2(grid),
                            imags=flex.double(grid.size(), 0))
    grid_transformed = flex.abs(fft.backward(grid_complex))
    print flex.max(grid_transformed), flex.min(grid_transformed), grid_transformed.all()
    ccp4_map.write_ccp4_map(map_file, uc, sgtbx.space_group("P1"), 
                            (0, 0, 0), grid.all(), grid_transformed,
                            flex.std_string(["cctbx.miller.fft_map"]))
示例#41
0
 def _construct_goniometer(phi, kappa, omega):
     phi_axis = (1.0, 0.0, 0.0)
     kappa_axis = (0.914, 0.279, -0.297)
     omega_axis = (1.0, 0.0, 0.0)
     axes = flex.vec3_double((phi_axis, kappa_axis, omega_axis))
     angles = flex.double((phi, kappa, omega))
     names = flex.std_string(("GON_PHI", "GON_KAPPA", "GON_OMEGA"))
     return GoniometerFactory.make_multi_axis_goniometer(
         axes, angles, names, scan_axis=2
     )
示例#42
0
def ccp4_map(crystal_symmetry, file_name, map_data):
  from iotbx import ccp4_map
  ccp4_map.write_ccp4_map(
      file_name=file_name,
      unit_cell=crystal_symmetry.unit_cell(),
      space_group=crystal_symmetry.space_group(),
      #gridding_first=(0,0,0),# This causes a bug (map gets shifted)
      #gridding_last=n_real,  # This causes a bug (map gets shifted)
      map_data=map_data,
      labels=flex.std_string([""]))
示例#43
0
 def _construct_goniometer(phi, chi, omega):
     phi_axis = (1.0, 0.0, 0.0)
     chi_axis = (0, 0, -1)
     omega_axis = (1.0, 0.0, 0.0)
     axes = flex.vec3_double((phi_axis, chi_axis, omega_axis))
     angles = flex.double((phi, chi, omega))
     names = flex.std_string(("GON_PHI", "GON_CHI", "GON_OMEGA"))
     return GoniometerFactory.make_multi_axis_goniometer(
         axes, angles, names, scan_axis=2
     )
示例#44
0
def run(args):
  log = sys.stdout
  if len(args) == 0:
    format_usage_message(log)
    return
  inputs = mmtbx.utils.process_command_line_args(args=args,
      master_params=master_params())
  work_params = inputs.params.extract()
  inputs.params.show(prefix=" ", out=log)
  pdb_file_names = list(inputs.pdb_file_names)
  if work_params.file_name is not None:
    pdb_file_names += work_params.file_name
  if len(pdb_file_names) == 0:
    raise Sorry("No PDB file specified")
  work_params.model_idealization.enabled=True
  # work_params.model_idealization.file_name_before_regularization="before.pdb"

  pdb_combined = iotbx.pdb.combine_unique_pdb_files(file_names=pdb_file_names)
  pdb_input = iotbx.pdb.input(source_info=None,
    lines=flex.std_string(pdb_combined.raw_records))
  pdb_h = pdb_input.construct_hierarchy()
  # couple checks if combined pdb_h is ok
  o_c = pdb_h.overall_counts()
  o_c.raise_duplicate_atom_labels_if_necessary()
  o_c.raise_residue_groups_with_multiple_resnames_using_same_altloc_if_necessary()
  o_c.raise_chains_with_mix_of_proper_and_improper_alt_conf_if_necessary()
  o_c.raise_improper_alt_conf_if_necessary()

  ann = ioss.annotation.from_phil(
      phil_helices=work_params.secondary_structure.protein.helix,
      phil_sheets=work_params.secondary_structure.protein.sheet,
      pdb_hierarchy=pdb_h)
  if ann.get_n_helices() + ann.get_n_sheets() == 0:
    ann = pdb_input.extract_secondary_structure()
  if ann is None or ann.get_n_helices() + ann.get_n_sheets() == 0:
    raise Sorry("No secondary structure annotations found.")
  ssb.substitute_ss(
      real_h=pdb_h,
      xray_structure=pdb_input.xray_structure_simple(),
      ss_annotation=ann,
      params=work_params.model_idealization,
      cif_objects=inputs.cif_objects,
      verbose=True,
      log=log,
      )
  # Write resulting pdb file.
  write_whole_pdb_file(
      file_name="%s_idealized.pdb" % os.path.basename(pdb_file_names[0]),
      pdb_hierarchy=pdb_h,
      crystal_symmetry=pdb_input.crystal_symmetry(),
      ss_annotation=ann)
  print >> log, "All done."
示例#45
0
def ccp4_map(cg, file_name, mc=None, map_data=None):
  assert [mc, map_data].count(None)==1
  if(map_data is None):
    map_data = get_map(mc=mc, cg=cg)
  from iotbx import ccp4_map
  ccp4_map.write_ccp4_map(
      file_name=file_name,
      unit_cell=cg.unit_cell(),
      space_group=cg.space_group(),
      #gridding_first=(0,0,0),# This causes a bug (map gets shifted)
      #gridding_last=n_real,  # This causes a bug (map gets shifted)
      map_data=map_data,
      labels=flex.std_string([""]))
示例#46
0
 def write_mtz_file(self, file_name, mtz_history_buffer = None,
     r_free_flags=None):
   from cctbx.array_family import flex
   if(self.mtz_dataset is not None):
     if (r_free_flags is not None) :
       self.mtz_dataset.add_miller_array(r_free_flags,
         column_root_label="FreeR_flag")
     if(mtz_history_buffer is None):
       mtz_history_buffer = flex.std_string()
     mtz_history_buffer.append(date_and_time())
     mtz_history_buffer.append("> file name: %s" % os.path.basename(file_name))
     mtz_object = self.mtz_dataset.mtz_object()
     mtz_object.add_history(mtz_history_buffer)
     mtz_object.write(file_name = file_name)
     return True
   return False
示例#47
0
    def run(self):
        from dials.util.command_line import Command
        from dials.util.options import flatten_datablocks

        # Parse the command line
        params, options = self.parser.parse_args(show_diff_phil=True)

        # Ensure we have a data block
        datablocks = flatten_datablocks(params.input.datablock)
        if len(datablocks) == 0:
            self.parser.print_help()
            return
        elif len(datablocks) != 1:
            raise RuntimeError("only 1 datablock can be processed at a time")

        if not params.rs_mapper.map_file:
            raise RuntimeError("Please specify output map file (map_file=)")
        else:
            self.map_file = params.rs_mapper.map_file

        self.datablocks = flatten_datablocks(params.input.datablock)
        if len(self.datablocks) == 0:
            self.parser.print_help()
            return

        self.reverse_phi = params.rs_mapper.reverse_phi
        self.grid_size = params.rs_mapper.grid_size
        self.max_resolution = params.rs_mapper.max_resolution

        self.grid = flex.double(flex.grid(self.grid_size, self.grid_size, self.grid_size), 0)
        self.cnts = flex.int(flex.grid(self.grid_size, self.grid_size, self.grid_size), 0)

        for datablock in self.datablocks:
            for imageset in datablock.extract_imagesets():
                self.process_imageset(imageset)

        recviewer.normalize_voxels(self.grid, self.cnts)
        uc = uctbx.unit_cell((self.grid_size, self.grid_size, self.grid_size, 90, 90, 90))
        ccp4_map.write_ccp4_map(
            self.map_file,
            uc,
            sgtbx.space_group("P1"),
            (0, 0, 0),
            self.grid.all(),
            self.grid,
            flex.std_string(["cctbx.miller.fft_map"]),
        )
示例#48
0
文件: show.py 项目: dials/dials
  def format_column(key, data, format_strings=None):
    if isinstance(data, flex.vec3_double):
      c_strings = [c.as_string(format_strings[i].strip()) for i, c in enumerate(data.parts())]
    elif isinstance(data, flex.miller_index):
      c_strings = [c.as_string(format_strings[i].strip()) for i, c in enumerate(data.as_vec3_double().parts())]
    elif isinstance(data, flex.size_t):
      c_strings = [data.as_int().as_string(format_strings[0].strip())]
    else:
      c_strings = [data.as_string(format_strings[0].strip())]

    column = flex.std_string()
    max_element_lengths = [c.max_element_length() for c in c_strings]
    for i in range(len(c_strings[0])):

      column.append(('%%%is' %len(key)) %', '.join(
        ('%%%is' %max_element_lengths[j]) %c_strings[j][i]
        for j in range(len(c_strings))))
    return column
示例#49
0
 def __init__ (self,
     fofc_map,
     two_fofc_map,
     sites_cart=None,
     atom_names=None,
     unit_cell=None,
     atom_selection=None,
     xray_structure=None,
     radius=2.5) :
   from cctbx import maptbx
   from scitbx.array_family import flex
   assert ((len(fofc_map) == len(two_fofc_map)) and
           (fofc_map.focus() == two_fofc_map.focus()))
   self.atom_selection = atom_selection # assumes no HD already
   self.sites_cart = sites_cart
   if (atom_names is not None) and (type(atom_names).__name__!='std_string'):
     atom_names = flex.std_string(atom_names)
   self.atom_names = atom_names
   self.unit_cell = unit_cell
   if (atom_selection is not None) :
     assert (xray_structure is not None) and (len(self.atom_selection) > 0)
     self.sites_cart = xray_structure.sites_cart().select(self.atom_selection)
     self.unit_cell = xray_structure.unit_cell()
     labels = xray_structure.scatterers().extract_labels()
     self.atom_names = labels.select(self.atom_selection)
   self.map_sel = maptbx.grid_indices_around_sites(
     unit_cell=self.unit_cell,
     fft_n_real=fofc_map.focus(),
     fft_m_real=fofc_map.all(),
     sites_cart=self.sites_cart,
     site_radii=flex.double(self.sites_cart.size(), radius))
   assert (len(self.map_sel) > 0)
   self.fofc_map_sel = fofc_map.select(self.map_sel)
   self.two_fofc_map_sel = two_fofc_map.select(self.map_sel)
   self.fofc_map_levels = flex.double()
   self.two_fofc_map_levels = flex.double()
   for site_cart in self.sites_cart :
     site_frac = self.unit_cell.fractionalize(site_cart=site_cart)
     fofc_map_value = fofc_map.tricubic_interpolation(site_frac)
     two_fofc_map_value = two_fofc_map.tricubic_interpolation(site_frac)
     self.fofc_map_levels.append(fofc_map_value)
     self.two_fofc_map_levels.append(two_fofc_map_value)
   self._atom_lookup = { n.strip():i for i,n in enumerate(self.atom_names) }
def exercise_00(prefix="tst_rank_scale_map"):
  xrs = iotbx.pdb.input(source_info=None, lines=pdb_str).xray_structure_simple()
  fc = xrs.structure_factors(d_min=2).f_calc()
  cs = fc.crystal_symmetry()
  fft_map = fc.fft_map(resolution_factor=0.25)
  m = fft_map.real_map_unpadded()
  iotbx.ccp4_map.write_ccp4_map(
    file_name="%s.ccp4"%prefix,
    unit_cell=cs.unit_cell(),
    space_group=cs.space_group(),
    #gridding_first=(0,0,0),# This causes a bug (map gets shifted)
    #gridding_last=n_real,  # This causes a bug (map gets shifted)
    map_data=m,
    labels=flex.std_string([""]))
  easy_run.call("phenix.rank_scale_map %s.ccp4"%prefix)
  #
  ccp4_map = iotbx.ccp4_map.map_reader(
    file_name="%s.ccp4_rank_scaled.ccp4"%prefix)
  m = ccp4_map.data.as_double()
  mmm = m.as_1d().min_max_mean().as_tuple()
  assert approx_equal(mmm, [0,1,0.5], 0.01)
示例#51
0
def residue_density_quality (
    atom_group,
    unit_cell,
    two_fofc_map,
    fofc_map) :
  from scitbx.array_family import flex
  sites_cart = flex.vec3_double()
  atom_names = flex.std_string()
  for atom in atom_group.atoms() :
    if (not atom.element.strip() in ["H","D"]) :
      sites_cart.append(atom.xyz)
      atom_names.append(atom.name)
  if (len(sites_cart) == 0) :
    raise RuntimeError("No non-hydrogen atoms in %s" % atom_group.id_str())
  density = local_density_quality(
    fofc_map=fofc_map,
    two_fofc_map=two_fofc_map,
    sites_cart=sites_cart,
    atom_names=atom_names,
    unit_cell=unit_cell)
  return density
    def _goniometer(self):
      '''Return a model for a simple single-axis goniometer. This should
      probably be checked against the image header, though for miniCBF
      there are limited options for this.'''

      phi_value = 0.0

      chi_value = 0.0

      omega_value = 0.0

      from scitbx import matrix
      from scitbx.array_family import flex
      phi = (1.0, 0.0, 0.0)
      chi = (0.0, 0.0, 1.0)
      omega = (-1.0, 0.0, 0.0)
      axes = flex.vec3_double((phi, chi, omega))
      angles = flex.double((phi_value, chi_value, omega_value))
      names = flex.std_string(("GON_PHI", "GON_CHI", "GON_OMEGA"))
      return self._goniometer_factory.make_multi_axis_goniometer(
        axes, angles, names, scan_axis=2)
def run(args):
  # processing command-line stuff, out of the object
  log = multi_out()
  log.register("stdout", sys.stdout)
  if len(args) == 0:
    format_usage_message(log)
    return
  inputs = mmtbx.utils.process_command_line_args(args=args,
      master_params=master_params())
  work_params = inputs.params.extract()
  inputs.params.show(prefix=" ", out=log)
  pdb_file_names = list(inputs.pdb_file_names)
  if work_params.file_name is not None:
    pdb_file_names += work_params.file_name
  if len(pdb_file_names) == 0:
    raise Sorry("No PDB file specified")
  if work_params.output_prefix is None:
    work_params.output_prefix = os.path.basename(pdb_file_names[0])
  log_file_name = "%s.log" % work_params.output_prefix
  logfile = open(log_file_name, "w")
  log.register("logfile", logfile)
  if work_params.loop_idealization.output_prefix is None:
    work_params.loop_idealization.output_prefix = "%s_rama_fixed" % work_params.output_prefix
  pdb_combined = iotbx.pdb.combine_unique_pdb_files(file_names=pdb_file_names)
  pdb_input = iotbx.pdb.input(source_info=None,
    lines=flex.std_string(pdb_combined.raw_records))
  mi_object = model_idealization(
      pdb_input=pdb_input,
      cif_objects=inputs.cif_objects,
      params=work_params,
      log=log,
      verbose=True)
  mi_object.run()
  mi_object.print_stat_comparison()
  print >> log, "RMSD from starting model (backbone, all): %.4f, %.4f" % (
      mi_object.get_rmsd_from_start(), mi_object.get_rmsd_from_start2())
  mi_object.print_runtime()
  # add hydrogens if needed ?
  print >> log, "All done."
  log.close()
示例#54
0
def write_ccp4_map (sites_cart, unit_cell, map_data, n_real, file_name,
    buffer=10) :
  import iotbx.ccp4_map
  from cctbx import sgtbx
  from scitbx.array_family import flex
  if sites_cart is not None :
    frac_min, frac_max = unit_cell.box_frac_around_sites(
      sites_cart=sites_cart,
      buffer=buffer)
  else :
    frac_min, frac_max = (0.0, 0.0, 0.0), (1.0, 1.0, 1.0)
  gridding_first = tuple([ifloor(f*n) for f,n in zip(frac_min,n_real)])
  gridding_last = tuple([iceil(f*n) for f,n in zip(frac_max,n_real)])
  space_group = sgtbx.space_group_info("P1").group()
  iotbx.ccp4_map.write_ccp4_map(
    file_name=file_name,
    unit_cell=unit_cell,
    space_group=space_group,
    gridding_first=gridding_first,
    gridding_last=gridding_last,
    map_data=map_data,
    labels=flex.std_string(["iotbx.map_conversion.write_ccp4_map_box"]))
示例#55
0
def run(args):
  processed = iotbx.phil.process_command_line(
    args=args, master_string=master_phil_str)
  args = processed.remaining_args
  work_params = processed.work.extract().smoothing
  savitzky_golay_half_window = work_params.savitzky_golay.half_window
  savitzky_golay_degree = work_params.savitzky_golay.degree
  fourier_cutoff = work_params.fourier_filter_cutoff

  #assert (fourier_cutoff is not None or
          #[savitzky_golay_degree, savitzky_golay_half_window].count(None) == 0)

  method = work_params.method
  if method == "fourier_filter":
    assert work_params.fourier_filter_cutoff is not None

  for i, filename in enumerate(args):
    print filename
    f = open(filename, 'rb')
    x, y = zip(*[line.split() for line in f.readlines() if not line.startswith("#")])
    x = flex.double(flex.std_string(x))
    y = flex.double(flex.std_string(y))
    x = x[:-2]
    y = y[:-2]
    x_orig = x.deep_copy()
    y_orig = y.deep_copy()

    x, y = interpolate(x, y)

    if method == "savitzky_golay":
      x, y_smoothed = smoothing.savitzky_golay_filter(
        x, y, savitzky_golay_half_window, savitzky_golay_degree)

    elif method == "fourier_filter":
      x, y_smoothed = fourier_filter(x, y, cutoff_frequency=fourier_cutoff)

    from matplotlib import pyplot
    fontsize = 20
    pyplot.plot(x_orig, y_orig, color='black', linestyle='dotted', linewidth=2)
    #pyplot.plot(x_orig, y_orig, color='black', linewidth=2)
    pyplot.plot(x, y_smoothed, linewidth=2, color='red')
    pyplot_label_axes()
    pyplot.show()
    #pyplot.plot(x[:385], (y - y_smoothed)[:385], linewidth=2)
    #pyplot_label_axes()
    #pyplot.show()

    filename = os.path.join(os.path.dirname(filename), "smoothed_spectrum.txt")
    f = open(filename, "wb")
    print >> f, "\n".join(["%i %f" %(xi, yi)
                           for xi, yi in zip(x, y_smoothed)])
    f.close()
    print "Smoothed spectrum written to %s" %filename

    x_interp_size = x.size()
    for i, x_i in enumerate(reversed(x)):
      if x_i not in x_orig:
        assert x[x_interp_size - i - 1] == x_i
        del x[x_interp_size - i - 1]
        del y[x_interp_size - i - 1]
        del y_smoothed[x_interp_size - i - 1]

    x = x[10:-10]
    y = y[10:-10]
    y_smoothed = y_smoothed[10:-10]

    signal_to_noise = estimate_signal_to_noise(x, y, y_smoothed, plot=False)
示例#56
0
def test_multi_axis_goniometer():
  from libtbx.test_utils import approx_equal
  from scitbx.array_family import flex

  alpha = 50
  omega = -10
  kappa = 30
  phi = 20
  direction = '-y'

  from dxtbx.model.goniometer import KappaGoniometer
  kappa_omega_scan = KappaGoniometer(
    alpha, omega, kappa, phi, direction, 'omega')
  axes = (kappa_omega_scan.get_phi_axis(), kappa_omega_scan.get_kappa_axis(),
          kappa_omega_scan.get_omega_axis())
  angles = (kappa_omega_scan.get_phi_angle(), kappa_omega_scan.get_kappa_angle(),
            kappa_omega_scan.get_omega_angle())

  # First test a kappa goniometer with omega as the scan axis
  axes = flex.vec3_double(axes)
  angles = flex.double(angles)
  names = flex.std_string(('phi', 'kappa', 'omega'))
  scan_axis = 2

  multi_axis_omega_scan = goniometer_factory.multi_axis(
    axes, angles, names, scan_axis)
  assert approx_equal(multi_axis_omega_scan.get_fixed_rotation(), kappa_omega_scan.get_fixed_rotation())
  assert approx_equal(multi_axis_omega_scan.get_rotation_axis(), kappa_omega_scan.get_rotation_axis())

  recycle_omega = MultiAxisGoniometer.from_dict(multi_axis_omega_scan.to_dict())
  assert approx_equal(recycle_omega.get_axes(), multi_axis_omega_scan.get_axes())
  assert approx_equal(recycle_omega.get_angles(), multi_axis_omega_scan.get_angles())
  assert recycle_omega.get_scan_axis() == multi_axis_omega_scan.get_scan_axis()

  # Now test a kappa goniometer with phi as the scan axis
  kappa_phi_scan = KappaGoniometer(
    alpha, omega, kappa, phi, direction, 'phi')

  scan_axis = 0
  multi_axis_phi_scan = goniometer_factory.multi_axis(
    axes, angles, names, scan_axis)
  assert approx_equal(multi_axis_phi_scan.get_fixed_rotation(), kappa_phi_scan.get_fixed_rotation())
  from scitbx import matrix
  assert approx_equal(matrix.sqr(multi_axis_phi_scan.get_setting_rotation()) * multi_axis_phi_scan.get_rotation_axis(), kappa_phi_scan.get_rotation_axis())

  recycle_phi = MultiAxisGoniometer.from_dict(multi_axis_phi_scan.to_dict())
  assert approx_equal(recycle_phi.get_axes(), multi_axis_phi_scan.get_axes())
  assert approx_equal(recycle_phi.get_angles(), multi_axis_phi_scan.get_angles())
  assert recycle_phi.get_scan_axis() == multi_axis_phi_scan.get_scan_axis()

  s = easy_pickle.dumps(multi_axis_phi_scan)
  recycle = easy_pickle.loads(s)
  assert recycle == multi_axis_phi_scan

  assert approx_equal(recycle.get_axes(), multi_axis_phi_scan.get_axes())
  assert approx_equal(recycle.get_angles(), multi_axis_phi_scan.get_angles())
  assert recycle.get_scan_axis() == multi_axis_phi_scan.get_scan_axis()
  recycle.set_angles((0,90,180))
  assert approx_equal(recycle.get_angles(), (0, 90, 180))
  new_axes = (0.9, 0.1, 0.0), (0.6427876096865394, -0.766044443118978, 0.0), (1.0, 0.0, 0.0)
  new_axes = flex.vec3_double(
    ((0.99996, -0.00647, -0.00659), (0.91314, 0.27949, -0.29674),
     (1.00000, -0.00013, -0.00064)))
  recycle.set_axes(new_axes)
  assert approx_equal(recycle.get_axes(), new_axes)

  # Check exception is raised if scan axis is out range
  try: goniometer_factory.multi_axis(axes, angles, names, 3)
  except RuntimeError, e: pass
  else: raise Exception_expected

  # Single axis is just a special case of a multi axis goniometer
  single_axis = goniometer_factory.multi_axis(
    flex.vec3_double(((1,0,0),)), flex.double((0,)), flex.std_string(('PHI',)), 0)
  assert single_axis.get_fixed_rotation() == (1,0,0,0,1,0,0,0,1)
  assert single_axis.get_setting_rotation() == (1,0,0,0,1,0,0,0,1)
  assert single_axis.get_rotation_axis() == (1,0,0)

  print 'OK'
示例#57
0
def get_pdb_hierarchy (file_names) :
  assert 0, "Hopefully is not used"
  pdb_combined = iotbx.pdb.combine_unique_pdb_files(file_names=file_names)
  pdb_structure = iotbx.pdb.input(source_info=None,
    lines=flex.std_string(pdb_combined.raw_records))
  return pdb_structure.construct_hierarchy()
def run (args, params=None, out=sys.stdout, log=sys.stderr) :
  # params keyword is for running program from GUI dialog
  if ( ((len(args) == 0) and (params is None)) or
       ((len(args) > 0) and ((args[0] == "-h") or (args[0] == "--help"))) ):
    show_usage()
    return

  # parse command-line arguments
  if (params is None):
    pcl = iotbx.phil.process_command_line_with_files(
      args=args,
      master_phil_string=master_phil_str,
      pdb_file_def="file_name")
    work_params = pcl.work.extract()
  # or use parameters defined by GUI
  else:
    work_params = params
  pdb_files = work_params.file_name

  work_params.secondary_structure.enabled=True
  assert work_params.format in ["phenix", "phenix_refine", "phenix_bonds",
      "pymol", "refmac", "kinemage", "pdb"]
  if work_params.quiet :
    out = cStringIO.StringIO()

  pdb_combined = iotbx.pdb.combine_unique_pdb_files(file_names=pdb_files)
  pdb_structure = iotbx.pdb.input(source_info=None,
    lines=flex.std_string(pdb_combined.raw_records))
  cs = pdb_structure.crystal_symmetry()

  corrupted_cs = False
  if cs is not None:
    if [cs.unit_cell(), cs.space_group()].count(None) > 0:
      corrupted_cs = True
      cs = None
    elif cs.unit_cell().volume() < 10:
      corrupted_cs = True
      cs = None

  if cs is None:
    if corrupted_cs:
      print >> out, "Symmetry information is corrupted, "
    else:
      print >> out, "Symmetry information was not found, "
    print >> out, "putting molecule in P1 box."
    from cctbx import uctbx
    atoms = pdb_structure.atoms()
    box = uctbx.non_crystallographic_unit_cell_with_the_sites_in_its_center(
      sites_cart=atoms.extract_xyz(),
      buffer_layer=3)
    atoms.set_xyz(new_xyz=box.sites_cart)
    cs = box.crystal_symmetry()
  from mmtbx.monomer_library import pdb_interpretation, server
  import mmtbx
  import mmtbx.command_line.geometry_minimization

  mon_lib_srv = server.server()
  ener_lib = server.ener_lib()
  defpars = mmtbx.command_line.geometry_minimization.master_params().extract()
  defpars.pdb_interpretation.automatic_linking.link_carbohydrates=False
  defpars.pdb_interpretation.c_beta_restraints=False
  defpars.pdb_interpretation.clash_guard.nonbonded_distance_threshold=None
  processed_pdb_file = pdb_interpretation.process(
    mon_lib_srv    = mon_lib_srv,
    ener_lib       = ener_lib,
    pdb_inp        = pdb_structure,
    crystal_symmetry = cs,
    params         = defpars.pdb_interpretation,
    force_symmetry = True)
  pdb_hierarchy = processed_pdb_file.all_chain_proxies.pdb_hierarchy
  geometry = processed_pdb_file.geometry_restraints_manager()
  geometry.pair_proxies(processed_pdb_file.xray_structure().sites_cart())
  pdb_hierarchy.atoms().reset_i_seq()
  if len(pdb_hierarchy.models()) != 1 :
    raise Sorry("Multiple models not supported.")
  ss_from_file = None
  if hasattr(pdb_structure, "extract_secondary_structure"):
    ss_from_file = pdb_structure.extract_secondary_structure()
  m = manager(pdb_hierarchy=pdb_hierarchy,
    geometry_restraints_manager=geometry,
    sec_str_from_pdb_file=ss_from_file,
    params=work_params.secondary_structure,
    verbose=work_params.verbose)

  # bp_p = nucleic_acids.get_basepair_plane_proxies(
  #     pdb_hierarchy,
  #     m.params.secondary_structure.nucleic_acid.base_pair,
  #     geometry)
  # st_p = nucleic_acids.get_stacking_proxies(
  #     pdb_hierarchy,
  #     m.params.secondary_structure.nucleic_acid.stacking_pair,
  #     geometry)
  # hb_b, hb_a = nucleic_acids.get_basepair_hbond_proxies(pdb_hierarchy,
  #     m.params.secondary_structure.nucleic_acid.base_pair)
  result_out = cStringIO.StringIO()
  # prefix_scope="refinement.pdb_interpretation"
  # prefix_scope=""
  prefix_scope=""
  if work_params.format == "phenix_refine":
    prefix_scope = "refinement.pdb_interpretation"
  elif work_params.format == "phenix":
    prefix_scope = "pdb_interpretation"
  ss_phil = None
  working_phil = m.as_phil_str(master_phil=sec_str_master_phil)
  phil_diff = sec_str_master_phil.fetch_diff(source=working_phil)

  if work_params.format in ["phenix", "phenix_refine"]:
    comment = "\n".join([
      "# These parameters are suitable for use in e.g. phenix.real_space_refine",
      "# or geometry_minimization. To use them in phenix.refine add ",
      "# 'refinement.' if front of pdb_interpretation."])
    if work_params.format == "phenix_refine":
      comment = "\n".join([
      "# These parameters are suitable for use in phenix.refine only.",
      "# To use them in other Phenix tools remove ",
      "# 'refinement.' if front of pdb_interpretation."])
    print >> result_out, comment
    if (prefix_scope != "") :
      print >> result_out, "%s {" % prefix_scope
    if work_params.show_all_params :
      working_phil.show(prefix="  ", out=result_out)
    else :
      phil_diff.show(prefix="  ", out=result_out)
    if (prefix_scope != "") :
      print >> result_out, "}"
  elif work_params.format == "pdb":
    print >> result_out, m.actual_sec_str.as_pdb_str()
  elif work_params.format == "phenix_bonds" :
    raise Sorry("Not yet implemented.")
  elif work_params.format in ["pymol", "refmac", "kinemage"] :
    m.show_summary(log=out)
    (hb_proxies, hb_angle_proxies, planarity_proxies,
        parallelity_proxies) = m.create_all_new_restraints(
        pdb_hierarchy=pdb_hierarchy,
        grm=geometry,
        log=out)
    if hb_proxies.size() > 0:
      if work_params.format == "pymol" :
        bonds_in_format = hb_proxies.as_pymol_dashes(
            pdb_hierarchy=pdb_hierarchy)
      elif work_params.format == "kinemage" :
        bonds_in_format = hb_proxies.as_kinemage(
            pdb_hierarchy=pdb_hierarchy)
      else :
        bonds_in_format = hb_proxies.as_refmac_restraints(
            pdb_hierarchy=pdb_hierarchy)
      print >> result_out, bonds_in_format
  result = result_out.getvalue()
  filename = "%s_ss.eff" %os.path.basename(work_params.file_name[0])
  outf = open(filename, "w")
  outf.write(result)
  outf.close()
  print >> out, result

  return os.path.abspath(filename)