예제 #1
0
def test_mrc_header_from_params_defaults(shape, mrc_mode_dtype, ispg_kind):
    """Test the utility function for the minimal required parameters."""
    mode, dtype = mrc_mode_dtype
    true_ispg, kind = ispg_kind
    header = mrc_header_from_params(shape, dtype, kind)

    # Check values of all header entries
    nx = header['nx']['value']
    ny = header['ny']['value']
    nz = header['nz']['value']
    assert all_equal([nx, ny, nz], shape)
    assert header['mode']['value'] == mode
    mx = header['mx']['value']
    my = header['my']['value']
    mz = header['mz']['value']
    assert all_equal([mx, my, mz], shape)
    cella = header['cella']['value']
    assert all_equal(cella, np.ones(3) * shape)
    mapc = header['mapc']['value']
    mapr = header['mapr']['value']
    maps = header['maps']['value']
    assert all_equal([mapc, mapr, maps], [1, 2, 3])
    dmin = header['dmin']['value']
    dmax = header['dmax']['value']
    dmean = header['dmean']['value']
    rms = header['rms']['value']
    assert all_equal([dmin, dmax, dmean, rms], [1.0, 0.0, -1.0, -1.0])
    ispg = header['ispg']['value']
    assert ispg == true_ispg
    nsymbt = header['nsymbt']['value']
    assert nsymbt == 0
    exttype = header['exttype']['value']
    assert np.array_equal(exttype, np.fromstring('    ', dtype='S1'))
    nversion = header['nversion']['value']
    assert nversion == 20140
    origin = header['origin']['value']
    assert all_equal(origin, [0, 0, 0])
    map = header['map']['value']
    assert np.array_equal(map, np.fromstring('MAP ', dtype='S1'))
    machst = header['machst']['value']
    assert np.array_equal(machst, np.fromiter(b'DD  ', dtype='S1'))
    nlabl = header['nlabl']['value']
    assert nlabl == 0
    label = header['label']['value']
    assert np.array_equal(label, np.zeros([10, 80], dtype='S1'))

    # Check all data types
    int32_vars = [nx, ny, nz, mx, my, mz, mapc, mapr, maps, ispg, nsymbt,
                  nversion, origin, nlabl]
    for v in int32_vars:
        assert v.dtype == np.dtype('int32')

    float32_vars = [cella, dmin, dmax, dmean, rms]
    for v in float32_vars:
        assert v.dtype == np.dtype('float32')

    string_vars = [exttype, map, machst, label]
    for v in string_vars:
        assert v.dtype == np.dtype('S1')
예제 #2
0
def test_mrc_io(shape, mrc_mode_dtype, ispg_kind, axis_order):
    """Test reading and writing MRC files and the class properties."""
    _, dtype = mrc_mode_dtype
    _, kind = ispg_kind

    # Data storage shape is the inverse permutation of nx, ny, nz
    data_storage_shape = tuple(shape[ax] for ax in np.argsort(axis_order))
    header = mrc_header_from_params(shape, dtype, kind,
                                    axis_order=axis_order)

    # Test writer properties using standard class construction
    with tempfile.NamedTemporaryFile() as named_file:
        file = named_file.file
        writer = FileWriterMRC(file, header)

        assert writer.header_size == 1024  # Standard MRC header size
        assert all_equal(writer.data_shape, shape)
        assert all_equal(writer.data_storage_shape, data_storage_shape)
        assert writer.data_dtype == dtype
        assert all_equal(writer.data_axis_order, axis_order)

        # Test writing some data (that all data types can represent).
        data = np.random.randint(0, 10, size=shape).astype(dtype)
        writer.write_data(data)

        # Check file size
        writer.file.seek(0, 2)
        file_size = writer.file.tell()
        assert file_size == writer.header_size + data.nbytes

        # Check flat arrays
        file.seek(1024)
        raw_data = np.fromfile(file, dtype=dtype)
        flat_data = np.transpose(data, axes=np.argsort(axis_order))
        flat_data = flat_data.reshape(-1, order='F')
        assert np.array_equal(raw_data, flat_data)

        # Write everything using the context manager syntax
        with FileWriterMRC(file, header) as writer:
            writer.write(data)

        # Read from the same file using the reader with standard constructor
        reader = FileReaderMRC(file)
        reader.read_header()
        assert writer.header_size == 1024  # Standard MRC header size
        assert all_equal(reader.data_shape, shape)
        assert all_equal(reader.data_storage_shape, data_storage_shape)
        assert reader.data_dtype == dtype
        assert reader.data_kind == kind
        assert all_equal(reader.data_axis_order, axis_order)
        assert np.allclose(reader.cell_sides_angstrom, 1.0)
        assert all_equal(reader.mrc_version, (2014, 0))
        assert reader.extended_header_type == '    '
        assert reader.labels == ()
예제 #3
0
파일: mrc_test.py 프로젝트: sushmita13/odl
def test_mrc_io(shape, mrc_mode_dtype, ispg_kind, axis_order):
    """Test reading and writing MRC files and the class properties."""
    _, dtype = mrc_mode_dtype
    _, kind = ispg_kind

    # Data storage shape is the inverse permutation of nx, ny, nz
    data_storage_shape = tuple(shape[ax] for ax in np.argsort(axis_order))
    header = mrc_header_from_params(shape, dtype, kind, axis_order=axis_order)

    # Test writer properties using standard class construction
    with tempfile.NamedTemporaryFile() as named_file:
        file = named_file.file
        writer = FileWriterMRC(file, header)

        assert writer.header_size == 1024  # Standard MRC header size
        assert all_equal(writer.data_shape, shape)
        assert all_equal(writer.data_storage_shape, data_storage_shape)
        assert writer.data_dtype == dtype
        assert all_equal(writer.data_axis_order, axis_order)

        # Test writing some data (that all data types can represent).
        data = np.random.randint(0, 10, size=shape).astype(dtype)
        writer.write_data(data)

        # Check file size
        writer.file.seek(0, 2)
        file_size = writer.file.tell()
        assert file_size == writer.header_size + data.nbytes

        # Check flat arrays
        file.seek(1024)
        raw_data = np.fromfile(file, dtype=dtype)
        flat_data = np.transpose(data, axes=np.argsort(axis_order))
        flat_data = flat_data.reshape(-1, order='F')
        assert np.array_equal(raw_data, flat_data)

        # Write everything using the context manager syntax
        with FileWriterMRC(file, header) as writer:
            writer.write(data)

        # Read from the same file using the reader with standard constructor
        reader = FileReaderMRC(file)
        reader.read_header()
        assert writer.header_size == 1024  # Standard MRC header size
        assert all_equal(reader.data_shape, shape)
        assert all_equal(reader.data_storage_shape, data_storage_shape)
        assert reader.data_dtype == dtype
        assert reader.data_kind == kind
        assert all_equal(reader.data_axis_order, axis_order)
        assert np.allclose(reader.cell_sides_angstrom, 1.0)
        assert all_equal(reader.mrc_version, (2014, 0))
        assert reader.extended_header_type == '    '
        assert reader.labels == ()
예제 #4
0
파일: mrc_test.py 프로젝트: sushmita13/odl
def test_mrc_header_from_params_kwargs():
    """Test the utility function for the minimal required parameters."""
    shape = (10, 20, 30)
    dtype = np.dtype('int8')
    kind = 'projections'
    kwargs = {
        'extent': [10.0, 1.5, 0.1],
        'axis_order': (2, 0, 1),
        'dmin': 1.0,
        'dmax': 5.0,
        'dmean': 2.0,
        'rms': 0.5,
        'mrc_version': (2014, 1),
        'text_labels': ['label 1', '   label 2   ']
    }
    header = mrc_header_from_params(shape, dtype, kind, **kwargs)

    # Check values of the header entries set by kwargs
    cella = header['cella']['value']
    assert np.allclose(cella, [10.0, 1.5, 0.1])
    mapc = header['mapc']['value']
    mapr = header['mapr']['value']
    maps = header['maps']['value']
    assert all_equal([mapc, mapr, maps], (3, 1, 2))
    dmin = header['dmin']['value']
    dmax = header['dmax']['value']
    dmean = header['dmean']['value']
    rms = header['rms']['value']
    assert all_equal([dmin, dmax, dmean, rms], [1.0, 5.0, 2.0, 0.5])
    nversion = header['nversion']['value']
    assert nversion == 20141
    nlabl = header['nlabl']['value']
    assert nlabl == 2
    label = header['label']['value']
    true_label = np.zeros([10, 80], dtype='S1')
    true_label[0] = np.fromstring('label 1'.ljust(80), dtype='S1')
    true_label[1] = np.fromstring('   label 2   '.ljust(80), dtype='S1')
    assert np.array_equal(label, true_label)

    # Check all data types
    for v in [mapc, mapr, maps, nversion, nlabl]:
        assert v.dtype == np.dtype('int32')

    for v in [cella, dmin, dmax, dmean, rms]:
        assert v.dtype == np.dtype('float32')

    assert label.dtype == np.dtype('S1')
예제 #5
0
def test_mrc_header_from_params_kwargs():
    """Test the utility function for the minimal required parameters."""
    shape = (10, 20, 30)
    dtype = np.dtype('int8')
    kind = 'projections'
    kwargs = {'extent': [10.0, 1.5, 0.1],
              'axis_order': (2, 0, 1),
              'dmin': 1.0,
              'dmax': 5.0,
              'dmean': 2.0,
              'rms': 0.5,
              'mrc_version': (2014, 1),
              'text_labels': ['label 1', '   label 2   ']
              }
    header = mrc_header_from_params(shape, dtype, kind, **kwargs)

    # Check values of the header entries set by kwargs
    cella = header['cella']['value']
    assert np.allclose(cella, [10.0, 1.5, 0.1])
    mapc = header['mapc']['value']
    mapr = header['mapr']['value']
    maps = header['maps']['value']
    assert all_equal([mapc, mapr, maps], (3, 1, 2))
    dmin = header['dmin']['value']
    dmax = header['dmax']['value']
    dmean = header['dmean']['value']
    rms = header['rms']['value']
    assert all_equal([dmin, dmax, dmean, rms], [1.0, 5.0, 2.0, 0.5])
    nversion = header['nversion']['value']
    assert nversion == 20141
    nlabl = header['nlabl']['value']
    assert nlabl == 2
    label = header['label']['value']
    true_label = np.zeros([10, 80], dtype='S1')
    true_label[0] = np.fromstring('label 1'.ljust(80), dtype='S1')
    true_label[1] = np.fromstring('   label 2   '.ljust(80), dtype='S1')
    assert np.array_equal(label, true_label)

    # Check all data types
    for v in [mapc, mapr, maps, nversion, nlabl]:
        assert v.dtype == np.dtype('int32')

    for v in [cella, dmin, dmax, dmean, rms]:
        assert v.dtype == np.dtype('float32')

    assert label.dtype == np.dtype('S1')
예제 #6
0
파일: mrc_test.py 프로젝트: sushmita13/odl
def test_mrc_header_from_params_defaults(shape, mrc_mode_dtype, ispg_kind):
    """Test the utility function for the minimal required parameters."""
    mode, dtype = mrc_mode_dtype
    true_ispg, kind = ispg_kind
    header = mrc_header_from_params(shape, dtype, kind)

    # Check values of all header entries
    nx = header['nx']['value']
    ny = header['ny']['value']
    nz = header['nz']['value']
    assert all_equal([nx, ny, nz], shape)
    assert header['mode']['value'] == mode
    mx = header['mx']['value']
    my = header['my']['value']
    mz = header['mz']['value']
    assert all_equal([mx, my, mz], shape)
    cella = header['cella']['value']
    assert all_equal(cella, np.ones(3) * shape)
    mapc = header['mapc']['value']
    mapr = header['mapr']['value']
    maps = header['maps']['value']
    assert all_equal([mapc, mapr, maps], [1, 2, 3])
    dmin = header['dmin']['value']
    dmax = header['dmax']['value']
    dmean = header['dmean']['value']
    rms = header['rms']['value']
    assert all_equal([dmin, dmax, dmean, rms], [1.0, 0.0, -1.0, -1.0])
    ispg = header['ispg']['value']
    assert ispg == true_ispg
    nsymbt = header['nsymbt']['value']
    assert nsymbt == 0
    exttype = header['exttype']['value']
    assert np.array_equal(exttype, np.fromstring('    ', dtype='S1'))
    nversion = header['nversion']['value']
    assert nversion == 20140
    origin = header['origin']['value']
    assert all_equal(origin, [0, 0, 0])
    map = header['map']['value']
    assert np.array_equal(map, np.fromstring('MAP ', dtype='S1'))
    machst = header['machst']['value']
    assert np.array_equal(machst, np.fromiter(b'DD  ', dtype='S1'))
    nlabl = header['nlabl']['value']
    assert nlabl == 0
    label = header['label']['value']
    assert np.array_equal(label, np.zeros([10, 80], dtype='S1'))

    # Check all data types
    int32_vars = [
        nx, ny, nz, mx, my, mz, mapc, mapr, maps, ispg, nsymbt, nversion,
        origin, nlabl
    ]
    for v in int32_vars:
        assert v.dtype == np.dtype('int32')

    float32_vars = [cella, dmin, dmax, dmean, rms]
    for v in float32_vars:
        assert v.dtype == np.dtype('float32')

    string_vars = [exttype, map, machst, label]
    for v in string_vars:
        assert v.dtype == np.dtype('S1')
예제 #7
0
파일: mrc_io.py 프로젝트: chongchenmath/odl
      np.array_equal(values, data))

# Plot the data to see that it also looks correct. We take the 5th slice
# along the first axis, which is in the middle.
plt.figure()
plt.title('A standing rectangle, middle right')
plt.imshow(data[5], cmap='Greys_r', interpolation='none')
plt.show()


# --- Writing --- #

# Create some data -- float32 is supported by MRC. Data must be 3D.
new_data = np.ones((50, 100, 200), dtype='float32')

# Create a minimal header. All parameters except these here have default
# values.
header = mrc_header_from_params(new_data.shape, new_data.dtype, kind='volume')

# Write the stuff to a temporary (MRC) file
out_file = tempfile.TemporaryFile()

with FileWriterMRC(out_file, header) as writer:
    # Write both header and data to the file
    writer.write(new_data)

    # Check if the file size is consistent with header and data sizes
    print('File size ({}) = Header size ({}) + Data size ({})'
          ''.format(writer.file.seek(0, 2), writer.header_size,
                    new_data.nbytes))
예제 #8
0
파일: mrc_io.py 프로젝트: sushmita13/odl
print('Values from file all equal to manually created array? ',
      np.array_equal(values, data))

# Plot the data to see that it also looks correct. We take the 5th slice
# along the first axis, which is in the middle.
plt.figure()
plt.title('A standing rectangle, middle right')
plt.imshow(data[5], cmap='Greys_r', interpolation='none')
plt.show()

# --- Writing --- #

# Create some data -- float32 is supported by MRC. Data must be 3D.
new_data = np.ones((50, 100, 200), dtype='float32')

# Create a minimal header. All parameters except these here have default
# values.
header = mrc_header_from_params(new_data.shape, new_data.dtype, kind='volume')

# Write the stuff to a temporary (MRC) file
out_file = tempfile.TemporaryFile()

with FileWriterMRC(out_file, header) as writer:
    # Write both header and data to the file
    writer.write(new_data)

    # Check if the file size is consistent with header and data sizes
    print('File size ({}) = Header size ({}) + Data size ({})'
          ''.format(writer.file.seek(0, 2), writer.header_size,
                    new_data.nbytes))