예제 #1
0
def test_miller_array_datatype():

    data_dir = os.path.dirname(os.path.abspath(__file__))
    data_mtz = os.path.join(data_dir, 'data',
                            'insulin_unmerged_cutted_from_ccp4.mtz')

    dm = DataManager(['miller_array', 'phil'])
    dm.process_miller_array_file(data_mtz)

    # test labels
    labels = [
        'M_ISYM', 'BATCH', 'I, SIGI', 'IPR, SIGIPR', 'FRACTIONCALC', 'XDET',
        'YDET', 'ROT', 'WIDTH', 'LP', 'MPART', 'FLAG', 'BGPKRATIOS'
    ]
    for label in dm.get_miller_array_labels():
        assert (label in labels)

    assert (len(dm.get_miller_arrays()) == len(dm.get_miller_array_labels()))

    # test access by label
    label = dm.get_miller_array_labels()[3]
    new_label = ', '.join(
        dm.get_miller_arrays(labels=[label])[0].info().labels)
    assert (label == new_label)

    # test custom PHIL
    dm.write_phil_file('test.phil',
                       dm.export_phil_scope().as_str(),
                       overwrite=True)
    loaded_phil = libtbx.phil.parse(file_name='test.phil')
    new_dm = DataManager(['miller_array', 'phil'])
    new_dm.load_phil_scope(loaded_phil)
    assert (data_mtz == new_dm.get_default_miller_array_name())
    for label in new_dm.get_miller_array_labels():
        assert (label in labels)

    os.remove('test.phil')
예제 #2
0
def test_01():

  data_dir = os.path.dirname(os.path.abspath(__file__))
  data_ccp4 = os.path.join(data_dir, 'data',
                          'non_zero_origin_map.ccp4')
  data_pdb = os.path.join(data_dir, 'data',
                          'non_zero_origin_map.ccp4')

  dm = DataManager(['miller_array','real_map', 'phil'])
  dm.set_overwrite(True)
  dm.process_real_map_file(data_ccp4)

  # test writing and reading file
  mm = dm.get_real_map()
  mm.shift_origin()
  mm.show_summary()
  dm.write_map_with_map_manager(mm, filename='test_map_manager.ccp4', overwrite=True)

  # get map_data
  map_data=mm.map_data()
  assert approx_equal(map_data[15,10,19], 0.38,eps=0.01)

  # get crystal_symmetry
  cs=mm.crystal_symmetry()
  assert approx_equal(cs.unit_cell().parameters()[0] ,22.41,eps=0.01)

  # and full cell symmetry
  full_cs=mm.unit_cell_crystal_symmetry()
  assert approx_equal(full_cs.unit_cell().parameters()[0] ,149.4066,eps=0.01)

  # write map directly:
  mm.write_map('test_direct.ccp4')

  # read back directly
  new_mm=map_manager('test_direct.ccp4')
  assert (not new_mm.is_similar(mm))

  new_mm.shift_origin()
  assert mm.is_similar(new_mm)

  # deep_copy
  new_mm=mm.deep_copy()
  assert new_mm.is_similar(mm)

  # customized_copy
  new_mm=mm.customized_copy(map_data=mm.map_data().deep_copy())
  assert new_mm.is_similar(mm)


  # Initialize with parameters
  mm_para=map_manager(
     unit_cell_grid= mm.unit_cell_grid,
     unit_cell_crystal_symmetry= mm.unit_cell_crystal_symmetry(),
     origin_shift_grid_units= mm.origin_shift_grid_units,
     map_data=mm.map_data())
  assert mm_para.is_similar(mm)

  # Adjust origin and gridding:
  mm_read=map_manager(data_ccp4)
  mm_read.set_origin_and_gridding((10,10,10),gridding=(100,100,100))
  assert (not mm_read.is_similar(mm))
  assert (not mm_read.already_shifted())

  # Adjust origin and gridding should fail if origin already shifted:
  mm_read=map_manager(data_ccp4)
  mm_read.shift_origin()
  mm_read.set_origin_and_gridding((10,10,10),gridding=(100,100,100))
  assert (mm_read.is_similar(mm))  # not shifted as it failed
  assert (mm_read.already_shifted())

  # Set input_file name
  mm_read.set_input_file_name('test input_file')
  assert mm_read.input_file_name=='test input_file'

  # Set program name
  mm_read.set_program_name('test program')
  assert mm_read.program_name=='test program'

  # Set limitation
  mm_read.add_limitation('map_is_sharpened')
  assert mm_read.limitations==['map_is_sharpened']

  # Add a label
  mm_read.add_label('TEST LABEL')
  assert mm_read.labels[0]=='TEST LABEL'
  mm_read.write_map('map_with_labels.mrc')
  new_mm=map_manager('map_with_labels.mrc')
  assert 'TEST LABEL' in new_mm.labels
  assert new_mm.is_in_limitations('map_is_sharpened')
  assert new_mm.labels[0].find('test program')>-1

  # Read a map directly
  mm_read=map_manager(data_ccp4)
  mm_read.shift_origin()
  assert mm_read.is_similar(mm)

  # Set log
  import sys
  mm.set_log(sys.stdout)

  # Add map_data
  mm_read.replace_map_data(map_data=mm.map_data().deep_copy())
  assert mm_read.is_similar(mm)



  dm.process_real_map_file('test_map_manager.ccp4')
  new_mm=dm.get_real_map('test_map_manager.ccp4')
  new_mm.show_summary()
  assert (not new_mm.is_similar(mm))
  new_mm.shift_origin()
  new_mm.show_summary()
  assert new_mm.is_similar(mm)
  os.remove('test_map_manager.ccp4')

  # Convert to map coeffs, write out, read back, convert back to map

  map_coeffs = mm.map_as_fourier_coefficients(high_resolution = 3)
  mtz_dataset = map_coeffs.as_mtz_dataset(column_root_label='F')
  mtz_object=mtz_dataset.mtz_object()
  dm.write_miller_array_file(mtz_object, filename="map_coeffs.mtz")
  # Note these Fourier coeffs correspond to working map (not original position)

  array_labels=dm.get_miller_array_labels("map_coeffs.mtz")
  labels=array_labels[0]
  dm.get_reflection_file_server(filenames=["map_coeffs.mtz"],labels=[labels])
  miller_arrays=dm.get_miller_arrays()
  new_map_coeffs=miller_arrays[0]
  map_data_from_map_coeffs=mm.fourier_coefficients_as_map(
      map_coeffs=new_map_coeffs)

  mm_from_map_coeffs=mm.customized_copy(map_data=map_data_from_map_coeffs)
  assert mm_from_map_coeffs.is_similar(mm)
예제 #3
0
def test_miller_array_datatype():

    data_dir = os.path.dirname(os.path.abspath(__file__))
    data_mtz = os.path.join(data_dir, 'data',
                            'insulin_unmerged_cutted_from_ccp4.mtz')

    dm = DataManager(['miller_array', 'phil'])
    dm.process_miller_array_file(data_mtz)

    # test labels
    labels = [
        'M_ISYM', 'BATCH', 'I,SIGI,merged', 'IPR,SIGIPR,merged',
        'FRACTIONCALC', 'XDET', 'YDET', 'ROT', 'WIDTH', 'LP', 'MPART', 'FLAG',
        'BGPKRATIOS'
    ]
    for label in dm.get_miller_array_labels():
        assert label in labels

    assert len(dm.get_miller_arrays()) == len(dm.get_miller_array_labels())

    # test access by label
    label = dm.get_miller_array_labels()[3]
    new_label = dm.get_miller_arrays(labels=[label])[0].info().label_string()
    assert label == new_label

    # test custom PHIL
    dm.write_phil_file(dm.export_phil_scope().as_str(),
                       filename='test.phil',
                       overwrite=True)
    loaded_phil = iotbx.phil.parse(file_name='test.phil')
    new_dm = DataManager(['miller_array', 'phil'])
    new_dm.load_phil_scope(loaded_phil)
    assert data_mtz == new_dm.get_default_miller_array_name()
    for label in new_dm.get_miller_array_labels():
        assert label in labels

    os.remove('test.phil')

    # test type
    assert dm.get_miller_array_type() == 'x_ray'
    label = labels[3]
    dm.set_miller_array_type(data_mtz, label, 'electron')
    assert dm.get_miller_array_type(label=label) == 'electron'
    dm.write_phil_file(dm.export_phil_scope().as_str(),
                       filename='test_phil',
                       overwrite=True)
    loaded_phil = iotbx.phil.parse(file_name='test_phil')
    new_dm.load_phil_scope(loaded_phil)
    assert new_dm.get_miller_array_type(label=label) == 'electron'
    new_dm = DataManager(['miller_array'])
    try:
        new_dm.set_default_miller_array_type('q')
    except Sorry:
        pass
    new_dm.set_default_miller_array_type('neutron')
    new_dm.process_miller_array_file(data_mtz)
    assert new_dm.get_miller_array_type(label=label) == 'neutron'

    os.remove('test_phil')

    # test writing file
    arrays = dm.get_miller_arrays()
    dataset = arrays[2].as_mtz_dataset(column_root_label='label1')
    dataset.add_miller_array(miller_array=arrays[3],
                             column_root_label='label2')
    mtz_object = dataset.mtz_object()
    dm.write_miller_array_file(mtz_object, filename='test.mtz', overwrite=True)
    dm.process_miller_array_file('test.mtz')
    new_labels = dm.get_miller_array_labels('test.mtz')
    assert 'label1,SIGlabel1' in new_labels
    assert 'label2,SIGlabel2' in new_labels

    os.remove('test.mtz')

    # test file server
    fs1 = dm.get_reflection_file_server()
    fs2 = dm.get_reflection_file_server([data_mtz, data_mtz])
    assert 2 * len(fs1.miller_arrays) == len(fs2.miller_arrays)
    cs = crystal.symmetry(
        unit_cell=dm.get_miller_arrays()[0].crystal_symmetry().unit_cell(),
        space_group_symbol='P1')
    fs = dm.get_reflection_file_server(crystal_symmetry=cs)
    assert fs.crystal_symmetry.is_similar_symmetry(cs)
    assert not fs.crystal_symmetry.is_similar_symmetry(
        dm.get_miller_arrays()[0].crystal_symmetry())
    fs = dm.get_reflection_file_server(labels=['I,SIGI,merged'])
    assert len(fs.get_miller_arrays(None)) == 1
    miller_array = fs.get_amplitudes(None, None, True, None, None)
    assert miller_array.info().label_string() == 'I,as_amplitude_array,merged'

    for label in dm.get_miller_array_labels():
        dm.set_miller_array_type(label=label, array_type='electron')
    fs = dm.get_reflection_file_server(array_type='x_ray')
    assert len(fs.get_miller_arrays(None)) == 0
    fs = dm.get_reflection_file_server(array_type='electron')
    assert len(fs.get_miller_arrays(None)) == 13
    fs = dm.get_reflection_file_server(
        filenames=[data_mtz],
        labels=[['I,SIGI,merged', 'IPR,SIGIPR,merged']],
        array_type='neutron')
    assert len(fs.get_miller_arrays(None)) == 0
    for label in ['I,SIGI,merged', 'IPR,SIGIPR,merged']:
        dm.set_miller_array_type(label=label, array_type='x_ray')
    fs = dm.get_reflection_file_server(
        filenames=[data_mtz],
        labels=[['I,SIGI,merged', 'IPR,SIGIPR,merged']],
        array_type='x_ray')
    assert len(fs.get_miller_arrays(data_mtz)) == 2
    fs = dm.get_reflection_file_server(filenames=[data_mtz],
                                       array_type='x_ray')
    assert len(fs.get_miller_arrays(data_mtz)) == 2
    fs = dm.get_reflection_file_server(filenames=[data_mtz],
                                       array_type='electron')
    assert len(fs.get_miller_arrays(data_mtz)) == 11

    # test subset of labels
    label_subset = labels[3:8]
    dm = DataManager(['miller_array', 'phil'])
    dm.process_miller_array_file(data_mtz)
    dm._miller_array_labels[data_mtz] = label_subset
    dm.set_miller_array_type(label=label_subset[2], array_type='electron')
    assert dm.get_miller_array_type(label=label_subset[2]) == 'electron'
    dm.write_phil_file(dm.export_phil_scope().as_str(),
                       filename='test.phil',
                       overwrite=True)
    loaded_phil = iotbx.phil.parse(file_name='test.phil')
    new_dm = DataManager(['miller_array', 'phil'])
    new_dm.load_phil_scope(loaded_phil)
    assert new_dm.get_miller_array_type(label=label_subset[2]) == 'electron'
    fs = new_dm.get_reflection_file_server(array_type='x_ray')
    assert len(fs.get_miller_arrays(None)) == 4
    fs = new_dm.get_reflection_file_server(array_type='electron')
    assert len(fs.get_miller_arrays(None)) == 1
    os.remove('test.phil')

    label_subset = list()
    dm = DataManager(['miller_array', 'phil'])
    dm.process_miller_array_file(data_mtz)
    dm._miller_array_labels[data_mtz] = label_subset
    dm.write_phil_file(dm.export_phil_scope().as_str(),
                       filename='test.phil',
                       overwrite=True)
    loaded_phil = iotbx.phil.parse(file_name='test.phil')
    new_dm = DataManager(['miller_array', 'phil'])
    new_dm.load_phil_scope(loaded_phil)
    fs = new_dm.get_reflection_file_server(array_type='x_ray')
    assert len(fs.get_miller_arrays(None)) == 13
    fs = new_dm.get_reflection_file_server(array_type='electron')
    assert len(fs.get_miller_arrays(None)) == 0
    os.remove('test.phil')
예제 #4
0
def test_01():

    # Source data (map and model)

    data_dir = os.path.dirname(os.path.abspath(__file__))
    data_ccp4 = os.path.join(data_dir, 'data', 'non_zero_origin_map.ccp4')
    data_pdb = os.path.join(data_dir, 'data', 'non_zero_origin_model.pdb')

    # Read in map data with data_manager
    dm = DataManager(['real_map'])
    dm.set_overwrite(True)

    # Next step uses map_manager to do the actual reading
    dm.process_real_map_file(data_ccp4)
    mm = dm.get_real_map()

    # Shift the origin of the map; starts at (100,100,100)
    print(mm.map_data().origin())
    assert mm.map_data().origin() == (100, 100, 100)
    assert mm.origin_shift_grid_units == (0, 0, 0)
    mm.shift_origin()
    assert mm.map_data().origin() == (0, 0, 0)
    assert mm.origin_shift_grid_units == (100, 100, 100)
    mm.show_summary()

    # test cc_to_other_map
    assert mm.cc_to_other_map_manager(mm) == 1

    # test writing and reading file
    dm.write_real_map_file(mm,
                           filename='test_map_manager.ccp4',
                           overwrite=True)
    dm.process_real_map_file('test_map_manager.ccp4')
    new_mm = dm.get_real_map('test_map_manager.ccp4')
    os.remove('test_map_manager.ccp4')
    new_mm.shift_origin()
    # Check whether gridding and crystal_symmetry are similar for mm, new_mm
    assert new_mm.is_similar(mm)
    assert approx_equal(new_mm.map_data()[3125], mm.map_data()[3125])

    # test writing and reading file without shifting origin
    dm = DataManager(['real_map'])
    dm.set_overwrite(True)
    dm.process_real_map_file(data_ccp4)
    mm = dm.get_real_map()
    mm.show_summary()
    dm.write_real_map_file(mm,
                           filename='test_map_manager.ccp4',
                           overwrite=True)
    new_mm = map_manager('test_map_manager.ccp4')
    assert (new_mm.is_similar(mm))
    new_mm.shift_origin()
    assert (not new_mm.is_similar(mm))

    # get map_data
    dm = DataManager(['real_map'])
    dm.set_overwrite(True)
    dm.process_real_map_file(data_ccp4)
    mm = dm.get_real_map()
    mm.shift_origin()
    map_data = mm.map_data()
    assert approx_equal(map_data[15, 10, 19], 0.38, eps=0.01)

    # get crystal_symmetry
    cs = mm.crystal_symmetry()
    assert approx_equal(cs.unit_cell().parameters()[0], 22.41, eps=0.01)

    # and full cell symmetry
    full_cs = mm.unit_cell_crystal_symmetry()
    assert approx_equal(full_cs.unit_cell().parameters()[0],
                        149.4066,
                        eps=0.01)

    # write map directly:
    mm.write_map('test_direct.ccp4')

    # read back directly
    new_mm = map_manager('test_direct.ccp4')
    assert (not new_mm.is_similar(mm))

    new_mm.shift_origin()
    assert mm.is_similar(new_mm)
    assert approx_equal(new_mm.map_data()[3125], mm.map_data()[3125])

    # deep_copy
    new_mm = mm.deep_copy()
    assert new_mm.is_similar(mm)
    assert approx_equal(new_mm.map_data()[3125], mm.map_data()[3125])

    # deep_copy a map without shifting origin
    # Make a DataManager that can write a map coeffs file too
    dm = DataManager(['miller_array', 'real_map'])
    dm.set_overwrite(True)
    dm.process_real_map_file(data_ccp4)
    omm = dm.get_real_map()
    omm.show_summary()
    new_omm = omm.deep_copy()
    assert new_omm.is_similar(omm)
    assert (not new_omm.is_similar(mm))

    # customized_copy
    new_mm = mm.customized_copy(map_data=mm.map_data().deep_copy())
    assert new_mm.is_similar(mm)

    # Initialize with parameters
    mm_para = map_manager(
        unit_cell_grid=mm.unit_cell_grid,
        unit_cell_crystal_symmetry=mm.unit_cell_crystal_symmetry(),
        origin_shift_grid_units=mm.origin_shift_grid_units,
        map_data=mm.map_data(),
        wrapping=False)
    assert mm_para.is_similar(mm)

    # Adjust origin and gridding:
    mm_read = map_manager(data_ccp4)
    mm_read.shift_origin()
    mm.show_summary()
    mm_read.show_summary()
    mm_read.set_original_origin_and_gridding((10, 10, 10),
                                             gridding=(100, 100, 100))
    mm_read.show_summary()
    assert (not mm_read.is_similar(mm))
    assert (mm_read.origin_is_zero())

    # Set program name
    mm_read.set_program_name('test program')
    assert mm_read.program_name == 'test program'

    # Set limitation
    mm_read.add_limitation('map_is_sharpened')
    assert mm_read.limitations == ['map_is_sharpened']

    # Add a label
    mm_read.add_label('TEST LABEL')
    assert mm_read.labels[0] == 'TEST LABEL'
    mm_read.write_map('map_with_labels.mrc')
    new_mm = map_manager('map_with_labels.mrc')
    assert 'TEST LABEL' in new_mm.labels
    assert new_mm.is_in_limitations('map_is_sharpened')
    assert new_mm.labels[0].find('test program') > -1

    # change the cell dimensions
    mm_read = map_manager(data_ccp4)
    mm_read.shift_origin()
    assert mm_read.is_similar(mm)
    assert approx_equal(mm_read.pixel_sizes(), (0.7470, 0.7231, 0.7374),
                        eps=0.001)
    from cctbx import crystal
    new_uc_params = list(
        mm_read.unit_cell_crystal_symmetry().unit_cell().parameters())
    new_uc_params[0] += 10
    new_cs = crystal.symmetry(new_uc_params, 1)
    mm_read.set_unit_cell_crystal_symmetry(new_cs)
    assert not mm_read.crystal_symmetry().is_similar_symmetry(
        mm.crystal_symmetry())
    assert not mm_read.is_similar(mm)
    mm_read.show_summary()
    assert approx_equal(mm_read.pixel_sizes(), (0.7970, 0.7231, 0.7374),
                        eps=0.001)

    # Read a map directly
    mm_read = map_manager(data_ccp4)
    mm_read.shift_origin()
    assert mm_read.is_similar(mm)

    # Set log
    import sys
    mm.set_log(sys.stdout)

    # Add map_data
    new_mm = mm_read.customized_copy(map_data=mm.map_data().deep_copy())
    assert new_mm.is_similar(mm)

    # replace data
    new_mm.set_map_data(map_data=mm.map_data().deep_copy())
    assert new_mm.is_similar(mm)

    # create a full-sized map from this one
    mm_full_size = mm_read.deep_copy().as_full_size_map()
    assert not mm_full_size.is_similar(mm_read)
    print(mm_full_size.map_data().origin(), mm_read.map_data().origin())
    print(mm_full_size.map_data().all(), mm_read.map_data().all())

    # Apply a mask to edges of a map
    assert approx_equal(new_mm.map_data().as_1d().min_max_mean().max,
                        mm.map_data().as_1d().min_max_mean().max)
    assert approx_equal((new_mm.map_data()[0], mm.map_data()[0]), (0.0, 0.0))
    new_mm.create_mask_around_edges(soft_mask_radius=3)
    new_mm.soft_mask(soft_mask_radius=3)
    assert approx_equal(new_mm.map_data().as_1d().min_max_mean().max,
                        mm.map_data().as_1d().min_max_mean().max)
    new_mm.apply_mask(set_outside_to_mean_inside=True)
    assert approx_equal((new_mm.map_data()[0], mm.map_data()[0]),
                        (0.0116267086024, 0.0))

    dm.process_real_map_file('test_map_manager.ccp4')
    new_mm = dm.get_real_map('test_map_manager.ccp4')
    new_mm.show_summary()
    assert (not new_mm.is_similar(mm))
    new_mm.shift_origin()
    new_mm.show_summary()
    assert new_mm.is_similar(mm)
    os.remove('test_map_manager.ccp4')

    # Check origin_shifts
    print(new_mm.origin_shift_grid_units)
    print(new_mm.shift_cart())
    assert approx_equal(new_mm.origin_shift_grid_units, (100, 100, 100))
    assert approx_equal(
        new_mm.shift_cart(),
        (-74.70333099365234, -72.30750274658205, -73.7437515258789))

    # Convert to map coeffs, write out, read back, convert back to map

    map_coeffs = mm.map_as_fourier_coefficients(d_min=3)
    mtz_dataset = map_coeffs.as_mtz_dataset(column_root_label='F')
    mtz_object = mtz_dataset.mtz_object()
    dm.write_miller_array_file(mtz_object, filename="map_coeffs.mtz")
    # Note these Fourier coeffs correspond to working map (not original position)

    array_labels = dm.get_miller_array_labels("map_coeffs.mtz")
    labels = array_labels[0]
    dm.get_reflection_file_server(filenames=["map_coeffs.mtz"],
                                  labels=[labels])
    miller_arrays = dm.get_miller_arrays()
    new_map_coeffs = miller_arrays[0]
    mm_from_map_coeffs = mm.fourier_coefficients_as_map_manager(
        map_coeffs=new_map_coeffs)

    assert mm_from_map_coeffs.is_similar(mm)

    # Find map symmetry in a map
    data_d7 = os.path.join(data_dir, 'data', 'D7.ccp4')
    dm = DataManager(['real_map', 'model'])
    dm.process_real_map_file(data_d7)
    dm.process_model_file(data_pdb)
    mm = dm.get_real_map(data_d7)
    model = dm.get_model(data_pdb)
    mm.shift_origin()
    mm.set_original_origin_and_gridding(original_origin=(0, 0, 0))

    # Box it so it is not so easy to find symmetry
    from cctbx.maptbx.box import with_bounds
    box = with_bounds(mm, lower_bounds=(2, 2, 2), upper_bounds=(43, 43, 43))
    new_mm = box.map_manager()
    new_mm.find_map_symmetry(symmetry='d7',
                             min_ncs_cc=0.8,
                             include_helical_symmetry=False)
    ncs_obj = new_mm.ncs_object()
    assert ncs_obj is not None
    print("NCS: ", new_mm.ncs_object().as_ncs_spec_string())
    another_mm = map_manager(
        unit_cell_grid=new_mm.unit_cell_grid,
        unit_cell_crystal_symmetry=new_mm.unit_cell_crystal_symmetry(),
        origin_shift_grid_units=new_mm.origin_shift_grid_units,
        map_data=new_mm.map_data(),
        ncs_object=ncs_obj,
        wrapping=False)
    assert another_mm.is_similar(new_mm)
    assert ncs_obj.is_similar_ncs_object(another_mm.ncs_object())
    assert new_mm.is_similar(another_mm)

    # Adjust model and ncs symmetry to match this map
    assert model.shift_cart() is None
    new_mm.set_model_symmetries_and_shift_cart_to_match_map(model)
    assert approx_equal(
        model.shift_cart(),
        (-0.888888888888889, -0.8888888888888891, -0.888888888888889))

    assert new_mm.is_compatible_ncs_object(ncs_obj)
    ncs_obj.set_shift_cart((0, 0, 0))
    assert not new_mm.is_compatible_ncs_object(ncs_obj)

    new_mm.set_ncs_object_shift_cart_to_match_map(ncs_obj)
    new_mm.set_ncs_object(ncs_obj)
    assert new_mm.is_compatible_ncs_object(new_mm.ncs_object())
    new_mm.show_summary()

    new_mm.shift_origin(desired_origin=(11, 1, 1))
    print(new_mm.shift_cart(), new_mm.ncs_object().shift_cart())
    assert new_mm.is_compatible_ncs_object(new_mm.ncs_object())
    new_mm.shift_origin()
    assert new_mm.is_compatible_ncs_object(new_mm.ncs_object())

    # filter a map
    dm = DataManager()
    mm = dm.get_real_map(data_d7)

    low_pass_filtered = mm.deep_copy()
    low_pass_filtered.resolution_filter(d_min=2.5)

    high_pass_filtered = mm.deep_copy()
    high_pass_filtered.resolution_filter(d_max=2.5)

    gaussian = mm.deep_copy()
    gaussian.gaussian_filter(smoothing_radius=1)

    binary = mm.deep_copy()
    binary.binary_filter(threshold=0.5)

    assert approx_equal(
        (mm.map_data().as_1d()[1073],
         low_pass_filtered.map_data().as_1d()[1073],
         high_pass_filtered.map_data().as_1d()[1073],
         gaussian.map_data().as_1d()[1073], binary.map_data().as_1d()[1073]),
        (0.0171344596893, 0.0227163900537, -0.0072717454565, 0.0149086679298,
         0.0))

    info = mm.get_density_along_line((5, 5, 5), (10, 10, 10))
    assert approx_equal([info.along_density_values[4]] +
                        list(info.along_sites[4]),
                        [-0.562231123447, 8.0, 8.0, 8.0])
    from iotbx.map_model_manager import map_model_manager
    extra_map_manager_id_list = [
        "low_pass_filtered", "high_pass_filtered", "gaussian", "binary"
    ]

    expected_cc = [
        0.999920243317, 0.0129365545729, 0.971491994253, 0.733986499746
    ]
    mam = map_model_manager(
        map_manager=mm,
        extra_map_manager_list=[
            low_pass_filtered, high_pass_filtered, gaussian, binary
        ],
        extra_map_manager_id_list=extra_map_manager_id_list,
    )
    for other_id, cc in zip(extra_map_manager_id_list, expected_cc):
        assert approx_equal(
            cc, mam.map_map_cc(map_id='map_manager', other_map_id=other_id))
def test_miller_array_datatype():

  data_dir = os.path.dirname(os.path.abspath(__file__))
  data_mtz = os.path.join(data_dir, 'data',
                          'insulin_unmerged_cutted_from_ccp4.mtz')

  dm = DataManager(['miller_array', 'phil'])
  dm.process_miller_array_file(data_mtz)

  # test labels
  labels = ['M_ISYM', 'BATCH', 'I,SIGI,merged', 'IPR,SIGIPR,merged',
            'FRACTIONCALC', 'XDET', 'YDET', 'ROT', 'WIDTH', 'LP', 'MPART',
            'FLAG', 'BGPKRATIOS']
  for label in dm.get_miller_array_labels():
    assert(label in labels)

  assert(len(dm.get_miller_arrays()) == len(dm.get_miller_array_labels()))

  # test access by label
  label = dm.get_miller_array_labels()[3]
  new_label = dm.get_miller_arrays(labels=[label])[0].info().label_string()
  assert(label == new_label)

  # test custom PHIL
  dm.write_phil_file('test.phil', dm.export_phil_scope().as_str(), True)
  loaded_phil = iotbx.phil.parse(file_name='test.phil')
  new_dm = DataManager(['miller_array', 'phil'])
  new_dm.load_phil_scope(loaded_phil)
  assert(data_mtz == new_dm.get_default_miller_array_name())
  for label in new_dm.get_miller_array_labels():
    assert(label in labels)

  os.remove('test.phil')

  # test type
  assert(dm.get_miller_array_type() == 'x_ray')
  dm.set_miller_array_type(data_mtz, 'electron')
  assert(dm.get_miller_array_type() == 'electron')
  dm.write_phil_file('test_phil', dm.export_phil_scope().as_str(), True)
  loaded_phil = iotbx.phil.parse(file_name='test_phil')
  new_dm.load_phil_scope(loaded_phil)
  assert(new_dm.get_miller_array_type() == 'electron')
  new_dm = DataManager(['miller_array'])
  try:
    new_dm.set_default_miller_array_type('q')
  except Sorry:
    pass
  new_dm.set_default_miller_array_type('neutron')
  new_dm.process_miller_array_file(data_mtz)
  assert(new_dm.get_miller_array_type() == 'neutron')

  # test file server
  fs1 = dm.get_reflection_file_server()
  fs2 = dm.get_reflection_file_server([data_mtz, data_mtz])
  assert(2*len(fs1.miller_arrays) == len(fs2.miller_arrays))
  cs = crystal.symmetry(
    unit_cell=dm.get_miller_arrays()[0].crystal_symmetry().unit_cell(),
    space_group_symbol='P1')
  fs = dm.get_reflection_file_server(crystal_symmetry=cs)
  assert(fs.crystal_symmetry.is_similar_symmetry(cs))
  assert(not fs.crystal_symmetry.is_similar_symmetry(
    dm.get_miller_arrays()[0].crystal_symmetry()))
  fs = dm.get_reflection_file_server(labels=['I,SIGI,merged'])
  assert(len(fs.get_miller_arrays(None)) == 1)
  miller_array = fs.get_amplitudes(None,None,True,None,None)
  assert(miller_array.info().label_string() == 'I,as_amplitude_array,merged')

  fs = dm.get_reflection_file_server(array_type='x_ray')
  assert(len(fs.get_miller_arrays(None)) == 0)
  fs = dm.get_reflection_file_server(array_type='electron')
  assert(len(fs.get_miller_arrays(None)) == 13)
  fs = dm.get_reflection_file_server(filenames=[data_mtz],
    labels=[['I,SIGI,merged', 'IPR,SIGIPR,merged']], array_type='neutron')
  assert(len(fs.get_miller_arrays(None)) == 0)
  dm.set_miller_array_type(data_mtz, 'x_ray')
  fs = dm.get_reflection_file_server(filenames=[data_mtz],
    labels=[['I,SIGI,merged', 'IPR,SIGIPR,merged']], array_type='x_ray')
  assert(len(fs.get_miller_arrays(data_mtz)) == 2)
예제 #6
0
def test_01():

    data_dir = os.path.dirname(os.path.abspath(__file__))
    data_ccp4 = os.path.join(data_dir, 'data', 'non_zero_origin_map.ccp4')
    data_pdb = os.path.join(data_dir, 'data', 'non_zero_origin_map.ccp4')

    dm = DataManager(['miller_array', 'real_map', 'phil'])
    dm.set_overwrite(True)
    dm.process_real_map_file(data_ccp4)

    # test writing and reading file
    mm = dm.get_real_map()
    mm.shift_origin()
    mm.show_summary()
    dm.write_real_map_file(mm,
                           filename='test_map_manager.ccp4',
                           overwrite=True)
    os.remove('test_map_manager.ccp4')

    # test writing and reading file without shifting origin
    dm = DataManager(['miller_array', 'real_map', 'phil'])
    dm.set_overwrite(True)
    dm.process_real_map_file(data_ccp4)
    mm = dm.get_real_map()
    mm.show_summary()
    dm.write_real_map_file(mm,
                           filename='test_map_manager.ccp4',
                           overwrite=True)

    new_mm = map_manager('test_map_manager.ccp4')
    assert (new_mm.is_similar(mm))
    new_mm.shift_origin()
    assert (not new_mm.is_similar(mm))

    # get map_data
    mm.shift_origin()
    map_data = mm.map_data()
    assert approx_equal(map_data[15, 10, 19], 0.38, eps=0.01)

    # get crystal_symmetry
    cs = mm.crystal_symmetry()
    assert approx_equal(cs.unit_cell().parameters()[0], 22.41, eps=0.01)

    # and full cell symmetry
    full_cs = mm.unit_cell_crystal_symmetry()
    assert approx_equal(full_cs.unit_cell().parameters()[0],
                        149.4066,
                        eps=0.01)

    # write map directly:
    mm.write_map('test_direct.ccp4')

    # read back directly
    new_mm = map_manager('test_direct.ccp4')
    assert (not new_mm.is_similar(mm))

    new_mm.shift_origin()
    assert mm.is_similar(new_mm)

    # deep_copy
    new_mm = mm.deep_copy()
    assert new_mm.is_similar(mm)

    # deep_copy a map without shifting origin
    dm = DataManager(['miller_array', 'real_map', 'phil'])
    dm.set_overwrite(True)
    dm.process_real_map_file(data_ccp4)
    omm = dm.get_real_map()
    omm.show_summary()
    new_omm = omm.deep_copy()
    assert new_omm.is_similar(omm)
    assert (not new_omm.is_similar(mm))

    # customized_copy
    new_mm = mm.customized_copy(map_data=mm.map_data().deep_copy())
    assert new_mm.is_similar(mm)

    # Initialize with parameters
    mm_para = map_manager(
        unit_cell_grid=mm.unit_cell_grid,
        unit_cell_crystal_symmetry=mm.unit_cell_crystal_symmetry(),
        origin_shift_grid_units=mm.origin_shift_grid_units,
        map_data=mm.map_data())
    assert mm_para.is_similar(mm)

    # Adjust origin and gridding:
    mm_read = map_manager(data_ccp4)
    mm_read.shift_origin()
    mm.show_summary()
    mm_read.show_summary()
    mm_read.set_original_origin_and_gridding((10, 10, 10),
                                             gridding=(100, 100, 100))
    mm_read.show_summary()
    assert (not mm_read.is_similar(mm))
    assert (mm_read.origin_is_zero())

    # Set program name
    mm_read.set_program_name('test program')
    assert mm_read.program_name == 'test program'

    # Set limitation
    mm_read.add_limitation('map_is_sharpened')
    assert mm_read.limitations == ['map_is_sharpened']

    # Add a label
    mm_read.add_label('TEST LABEL')
    assert mm_read.labels[0] == 'TEST LABEL'
    mm_read.write_map('map_with_labels.mrc')
    new_mm = map_manager('map_with_labels.mrc')
    assert 'TEST LABEL' in new_mm.labels
    assert new_mm.is_in_limitations('map_is_sharpened')
    assert new_mm.labels[0].find('test program') > -1

    # Read a map directly
    mm_read = map_manager(data_ccp4)
    mm_read.shift_origin()
    assert mm_read.is_similar(mm)

    # Set log
    import sys
    mm.set_log(sys.stdout)

    # Add map_data
    new_mm = mm_read.customized_copy(map_data=mm.map_data().deep_copy())
    assert new_mm.is_similar(mm)

    # replace data
    new_mm.set_map_data(map_data=mm.map_data().deep_copy())
    assert new_mm.is_similar(mm)

    # Apply a mask to edges of a map
    assert approx_equal(new_mm.map_data().as_1d().min_max_mean().max,
                        mm.map_data().as_1d().min_max_mean().max)
    assert approx_equal((new_mm.map_data()[0], mm.map_data()[0]), (0.0, 0.0))
    new_mm.create_mask_around_edges(soft_mask_radius=3)
    new_mm.soft_mask(soft_mask_radius=3)
    assert approx_equal(new_mm.map_data().as_1d().min_max_mean().max,
                        mm.map_data().as_1d().min_max_mean().max)
    new_mm.apply_mask(set_outside_to_mean_inside=True)
    assert approx_equal((new_mm.map_data()[0], mm.map_data()[0]),
                        (0.0116267086024, 0.0))

    dm.process_real_map_file('test_map_manager.ccp4')
    new_mm = dm.get_real_map('test_map_manager.ccp4')
    new_mm.show_summary()
    assert (not new_mm.is_similar(mm))
    new_mm.shift_origin()
    new_mm.show_summary()
    assert new_mm.is_similar(mm)
    os.remove('test_map_manager.ccp4')

    # Check origin_shifts
    print(new_mm.origin_shift_grid_units)
    print(new_mm.origin_shift_cart())
    assert approx_equal(new_mm.origin_shift_grid_units, (100, 100, 100))
    assert approx_equal(
        new_mm.origin_shift_cart(),
        (74.70333099365234, 72.30750274658205, 73.7437515258789))
    # Convert to map coeffs, write out, read back, convert back to map

    map_coeffs = mm.map_as_fourier_coefficients(high_resolution=3)
    mtz_dataset = map_coeffs.as_mtz_dataset(column_root_label='F')
    mtz_object = mtz_dataset.mtz_object()
    dm.write_miller_array_file(mtz_object, filename="map_coeffs.mtz")
    # Note these Fourier coeffs correspond to working map (not original position)

    array_labels = dm.get_miller_array_labels("map_coeffs.mtz")
    labels = array_labels[0]
    dm.get_reflection_file_server(filenames=["map_coeffs.mtz"],
                                  labels=[labels])
    miller_arrays = dm.get_miller_arrays()
    new_map_coeffs = miller_arrays[0]
    map_data_from_map_coeffs = mm.fourier_coefficients_as_map(
        map_coeffs=new_map_coeffs)

    mm_from_map_coeffs = mm.customized_copy(map_data=map_data_from_map_coeffs)
    assert mm_from_map_coeffs.is_similar(mm)
예제 #7
0
def test_miller_array_datatype():

    data_dir = os.path.dirname(os.path.abspath(__file__))
    data_mtz = os.path.join(data_dir, 'data',
                            'insulin_unmerged_cutted_from_ccp4.mtz')

    dm = DataManager(['miller_array', 'phil'])
    dm.process_miller_array_file(data_mtz)

    # test labels
    labels = [
        'M_ISYM', 'BATCH', 'I,SIGI,merged', 'IPR,SIGIPR,merged',
        'FRACTIONCALC', 'XDET', 'YDET', 'ROT', 'WIDTH', 'LP', 'MPART', 'FLAG',
        'BGPKRATIOS'
    ]
    for label in dm.get_miller_array_labels():
        assert (label in labels)

    assert (len(dm.get_miller_arrays()) == len(dm.get_miller_array_labels()))

    # test access by label
    label = dm.get_miller_array_labels()[3]
    new_label = dm.get_miller_arrays(labels=[label])[0].info().label_string()
    assert (label == new_label)

    # test custom PHIL
    dm.write_phil_file('test.phil',
                       dm.export_phil_scope().as_str(),
                       overwrite=True)
    loaded_phil = libtbx.phil.parse(file_name='test.phil')
    new_dm = DataManager(['miller_array', 'phil'])
    new_dm.load_phil_scope(loaded_phil)
    assert (data_mtz == new_dm.get_default_miller_array_name())
    for label in new_dm.get_miller_array_labels():
        assert (label in labels)

    os.remove('test.phil')

    # test file server
    fs1 = dm.get_reflection_file_server()
    fs2 = dm.get_reflection_file_server([data_mtz, data_mtz])
    assert (2 * len(fs1.miller_arrays) == len(fs2.miller_arrays))
    cs = crystal.symmetry(
        unit_cell=dm.get_miller_arrays()[0].crystal_symmetry().unit_cell(),
        space_group_symbol='P1')
    fs = dm.get_reflection_file_server(crystal_symmetry=cs)
    assert (fs.crystal_symmetry.is_similar_symmetry(cs))
    assert (not fs.crystal_symmetry.is_similar_symmetry(
        dm.get_miller_arrays()[0].crystal_symmetry()))
    fs = dm.get_reflection_file_server(labels=['I,SIGI,merged'])
    assert (len(fs.get_miller_arrays(None)) == 1)
    miller_array = fs.get_amplitudes(None, None, True, None, None)
    assert (
        miller_array.info().label_string() == 'I,as_amplitude_array,merged')

    master_phil_str = '''
include scope iotbx.data_manager.miller_array.miller_array_phil_str
  '''
    master_phil = libtbx.phil.parse(master_phil_str, process_includes=True)
    master_extract = master_phil.extract()
    master_extract.data[0].file_name = data_mtz
    master_extract.data[0].labels = 'IPR,SIGIPR,merged'
    fs = get_reflection_file_server(dm, master_extract)
    assert (len(fs.get_miller_arrays(None)) == 1)
    master_extract.data[0].type = 'neutron'
    fs = get_reflection_file_server(dm, master_extract)
    assert (fs is None)
    fs = get_reflection_file_server(dm, master_extract, datatype='neutron')
    assert (len(fs.get_miller_arrays(None)) == 1)