This documentation page refers to a previous release of DIALS (1.14).
Click here to go to the corresponding page for the latest version of DIALS

Source code for dials.util.image

#!/usr/bin/env python
#
# dials.util.image.py
#
#  Copyright (C) 2013 Diamond Light Source
#
#  Author: James Parkhurst
#
#  This code is distributed under the BSD license, a copy of which is
#  included in the root directory of this package.

from __future__ import absolute_import, division, print_function


[docs]class reader: """A class to read the CBF files used in DIALS""" def __init__(self): pass
[docs] def read_file(self, filename): """Read the CBF file""" import pycbf self.cbf_handle = pycbf.cbf_handle_struct() self.cbf_handle.read_file(filename, pycbf.MSG_DIGEST) self.cbf_handle.rewind_datablock()
[docs] def get_data(self): """Get the gain array from the file""" import numpy from scitbx.array_family import flex # Select the first datablock and rewind all the categories self.cbf_handle.select_datablock(0) self.cbf_handle.select_category(0) self.cbf_handle.select_column(2) self.cbf_handle.select_row(0) # Check the type of the element to ensure it's a binary # otherwise raise an exception type = self.cbf_handle.get_typeofvalue() if type.find("bnry") > -1: # Read the image data into an array image_string = self.cbf_handle.get_integerarray_as_string() image = flex.int(numpy.fromstring(image_string, numpy.int32)) # Get the array parameters parameters = self.cbf_handle.get_integerarrayparameters_wdims() image_size = (parameters[10], parameters[9]) # Resize the image image.reshape(flex.grid(*image_size)) else: raise TypeError("Can't find image") # Return the image return image
if __name__ == "__main__": import sys import numpy handle = reader() handle.read_file(sys.argv[1]) image = handle.get_data()