예제 #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,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')
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)