[SCM] Packaging for cctbx branch, master, updated. upstream/2012.05.08.2305-20-g8de5d0c

Radostan Riedel raybuntu at googlemail.com
Tue Jul 17 23:29:04 UTC 2012


The following commit has been merged in the master branch:
commit 8de5d0c0f26bc842e5b36296a32474e99164efd8
Author: Radostan Riedel <raybuntu at googlemail.com>
Date:   Tue Jul 17 19:05:53 2012 +0200

    Modify adding-setup_py.patch and rework debian files

diff --git a/debian/control b/debian/control
index 6d70bac..fcc200d 100644
--- a/debian/control
+++ b/debian/control
@@ -24,3 +24,51 @@ Description: Python Toolbox for crystallography
  Python Modules for general crystallographic applications, useful for both 
  small-molecule and macro-molecular crystallography and modules for general 
  scientific calculations.
+
+Package: libcctbx0
+Architecture: any
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Description: <>
+ <>
+
+Package: libiotbx0
+Architecture: any
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Description: <>
+ <>
+
+Package: libmmtbx0
+Architecture: any
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Description: <>
+ <>
+
+Package: libomptbx0
+Architecture: any
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Description: <>
+ <>
+
+Package: librstbx0
+Architecture: any
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Description: <>
+ <>
+
+Package: libscitbx0
+Architecture: any
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Description: <>
+ <>
+
+Package: libsmtbx0
+Architecture: any
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Description: <>
+ <>
+
+Package: libspotfinder0
+Architecture: any
+Depends: ${misc:Depends}, ${shlibs:Depends}
+Description: <>
+ <>
diff --git a/debian/libcctbx0.install b/debian/libcctbx0.install
new file mode 100644
index 0000000..33501c9
--- /dev/null
+++ b/debian/libcctbx0.install
@@ -0,0 +1 @@
+debian/tmp/usr/lib/libcctbx*.so.*
diff --git a/debian/libiotbx0.install b/debian/libiotbx0.install
new file mode 100644
index 0000000..6395370
--- /dev/null
+++ b/debian/libiotbx0.install
@@ -0,0 +1 @@
+debian/tmp/usr/lib/libiotbx*.so.*
diff --git a/debian/libmmtbx0.install b/debian/libmmtbx0.install
new file mode 100644
index 0000000..4c9fb17
--- /dev/null
+++ b/debian/libmmtbx0.install
@@ -0,0 +1 @@
+debian/tmp/usr/lib/libmmtbx*.so.*
diff --git a/debian/libomptbx0.install b/debian/libomptbx0.install
new file mode 100644
index 0000000..cd41e15
--- /dev/null
+++ b/debian/libomptbx0.install
@@ -0,0 +1 @@
+debian/tmp/usr/lib/libomptbx*.so.*
diff --git a/debian/librstbx0.install b/debian/librstbx0.install
new file mode 100644
index 0000000..7ddaf2e
--- /dev/null
+++ b/debian/librstbx0.install
@@ -0,0 +1 @@
+debian/tmp/usr/lib/librstbx*.so.*
diff --git a/debian/libscitbx0.install b/debian/libscitbx0.install
new file mode 100644
index 0000000..db184b4
--- /dev/null
+++ b/debian/libscitbx0.install
@@ -0,0 +1 @@
+debian/tmp/usr/lib/libscitbx*.so.*
diff --git a/debian/libsmtbx0.install b/debian/libsmtbx0.install
new file mode 100644
index 0000000..9a2f209
--- /dev/null
+++ b/debian/libsmtbx0.install
@@ -0,0 +1 @@
+debian/tmp/usr/lib/libsmtbx*.so.*
diff --git a/debian/libspotfinder0.install b/debian/libspotfinder0.install
new file mode 100644
index 0000000..842fe13
--- /dev/null
+++ b/debian/libspotfinder0.install
@@ -0,0 +1 @@
+debian/tmp/usr/lib/libspotfinder*.so.*
diff --git a/debian/patches/0004-adding-setup_py.patch b/debian/patches/0004-adding-setup_py.patch
index a89b8f8..4f36189 100644
--- a/debian/patches/0004-adding-setup_py.patch
+++ b/debian/patches/0004-adding-setup_py.patch
@@ -3,21 +3,7944 @@ Date: Sat, 30 Jun 2012 16:03:05 +0200
 Subject: adding-setup_py
 
 ---
- setup.py |   53 +++++++++++++++++++++++++++++++++++++++++++++++++++++
- 1 file changed, 53 insertions(+)
- create mode 100644 setup.py
+ cctbx_sources/pycbf.py  | 7734 +++++++++++++++++++++++++++++++++++++++++++++++
+ cctbx_sources/stdlib.py |    4 +
+ sconsutils.py           |  100 +
+ setup.py                |  111 +
+ 4 files changed, 7949 insertions(+)
+ create mode 100755 cctbx_sources/pycbf.py
+ create mode 100755 cctbx_sources/stdlib.py
+ create mode 100644 sconsutils.py
+ create mode 100755 setup.py
 
-diff --git a/setup.py b/setup.py
+diff --git a/cctbx_sources/pycbf.py b/cctbx_sources/pycbf.py
+new file mode 100755
+index 0000000..09499e6
+--- /dev/null
++++ b/cctbx_sources/pycbf.py
+@@ -0,0 +1,7734 @@
++# This file was automatically generated by SWIG (http://www.swig.org).
++# Version 2.0.1
++#
++# Do not make changes to this file unless you know what you are doing--modify
++# the SWIG interface file instead.
++# This file is compatible with both classic and new-style classes.
++
++from sys import version_info
++if version_info >= (2,6,0):
++    def swig_import_helper():
++        from os.path import dirname
++        import imp
++        fp = None
++        try:
++            fp, pathname, description = imp.find_module('_pycbf', [dirname(__file__)])
++        except ImportError:
++            import _pycbf
++            return _pycbf
++        if fp is not None:
++            try:
++                _mod = imp.load_module('_pycbf', fp, pathname, description)
++            finally:
++                fp.close()
++            return _mod
++    _pycbf = swig_import_helper()
++    del swig_import_helper
++else:
++    import _pycbf
++del version_info
++try:
++    _swig_property = property
++except NameError:
++    pass # Python < 2.2 doesn't have 'property'.
++def _swig_setattr_nondynamic(self,class_type,name,value,static=1):
++    if (name == "thisown"): return self.this.own(value)
++    if (name == "this"):
++        if type(value).__name__ == 'SwigPyObject':
++            self.__dict__[name] = value
++            return
++    method = class_type.__swig_setmethods__.get(name,None)
++    if method: return method(self,value)
++    if (not static) or hasattr(self,name):
++        self.__dict__[name] = value
++    else:
++        raise AttributeError("You cannot add attributes to %s" % self)
++
++def _swig_setattr(self,class_type,name,value):
++    return _swig_setattr_nondynamic(self,class_type,name,value,0)
++
++def _swig_getattr(self,class_type,name):
++    if (name == "thisown"): return self.this.own()
++    method = class_type.__swig_getmethods__.get(name,None)
++    if method: return method(self)
++    raise AttributeError(name)
++
++def _swig_repr(self):
++    try: strthis = "proxy of " + self.this.__repr__()
++    except: strthis = ""
++    return "<%s.%s; %s >" % (self.__class__.__module__, self.__class__.__name__, strthis,)
++
++try:
++    _object = object
++    _newclass = 1
++except AttributeError:
++    class _object : pass
++    _newclass = 0
++
++
++__author__ = "Jon Wright <wright at esrf.fr>"
++__date__ = "14 Dec 2005"
++__version__ = "CBFlib 0.9"
++__credits__ = """Paul Ellis and Herbert Bernstein for the excellent CBFlib!"""
++__doc__=""" pycbf - python bindings to the CBFlib library
++
++ A library for reading and writing ImageCIF and CBF files 
++ which store area detector images for crystallography.
++
++ This work is a derivative of the CBFlib version 0.7.7 library
++ by  Paul J. Ellis of Stanford Synchrotron Radiation Laboratory
++ and Herbert J. Bernstein of Bernstein + Sons
++ See:
++   http://www.bernstein-plus-sons.com/software/CBF/
++
++ Licensing is GPL based, see:
++   http://www.bernstein-plus-sons.com/software/CBF/doc/CBFlib_NOTICES.html
++
++ These bindings were automatically generated by SWIG, and the
++ input to SWIG was automatically generated by a python script.
++ We very strongly recommend you do not attempt to edit them 
++ by hand!
++
++
++
++ Copyright (C) 2007    Jonathan Wright
++                       ESRF, Grenoble, France
++                email: wright at esrf.fr
++    
++  Revised, August 2010  Herbert J. Bernstein
++    Add defines from CBFlib 0.9.1
++    
++"""
++
++class doubleArray(_object):
++    __swig_setmethods__ = {}
++    __setattr__ = lambda self, name, value: _swig_setattr(self, doubleArray, name, value)
++    __swig_getmethods__ = {}
++    __getattr__ = lambda self, name: _swig_getattr(self, doubleArray, name)
++    __repr__ = _swig_repr
++    def __init__(self, *args): 
++        this = _pycbf.new_doubleArray(*args)
++        try: self.this.append(this)
++        except: self.this = this
++    __swig_destroy__ = _pycbf.delete_doubleArray
++    __del__ = lambda self : None;
++    def __getitem__(self, *args): return _pycbf.doubleArray___getitem__(self, *args)
++    def __setitem__(self, *args): return _pycbf.doubleArray___setitem__(self, *args)
++    def cast(self): return _pycbf.doubleArray_cast(self)
++    __swig_getmethods__["frompointer"] = lambda x: _pycbf.doubleArray_frompointer
++    if _newclass:frompointer = staticmethod(_pycbf.doubleArray_frompointer)
++doubleArray_swigregister = _pycbf.doubleArray_swigregister
++doubleArray_swigregister(doubleArray)
++
++def doubleArray_frompointer(*args):
++  return _pycbf.doubleArray_frompointer(*args)
++doubleArray_frompointer = _pycbf.doubleArray_frompointer
++
++class intArray(_object):
++    __swig_setmethods__ = {}
++    __setattr__ = lambda self, name, value: _swig_setattr(self, intArray, name, value)
++    __swig_getmethods__ = {}
++    __getattr__ = lambda self, name: _swig_getattr(self, intArray, name)
++    __repr__ = _swig_repr
++    def __init__(self, *args): 
++        this = _pycbf.new_intArray(*args)
++        try: self.this.append(this)
++        except: self.this = this
++    __swig_destroy__ = _pycbf.delete_intArray
++    __del__ = lambda self : None;
++    def __getitem__(self, *args): return _pycbf.intArray___getitem__(self, *args)
++    def __setitem__(self, *args): return _pycbf.intArray___setitem__(self, *args)
++    def cast(self): return _pycbf.intArray_cast(self)
++    __swig_getmethods__["frompointer"] = lambda x: _pycbf.intArray_frompointer
++    if _newclass:frompointer = staticmethod(_pycbf.intArray_frompointer)
++intArray_swigregister = _pycbf.intArray_swigregister
++intArray_swigregister(intArray)
++
++def intArray_frompointer(*args):
++  return _pycbf.intArray_frompointer(*args)
++intArray_frompointer = _pycbf.intArray_frompointer
++
++class shortArray(_object):
++    __swig_setmethods__ = {}
++    __setattr__ = lambda self, name, value: _swig_setattr(self, shortArray, name, value)
++    __swig_getmethods__ = {}
++    __getattr__ = lambda self, name: _swig_getattr(self, shortArray, name)
++    __repr__ = _swig_repr
++    def __init__(self, *args): 
++        this = _pycbf.new_shortArray(*args)
++        try: self.this.append(this)
++        except: self.this = this
++    __swig_destroy__ = _pycbf.delete_shortArray
++    __del__ = lambda self : None;
++    def __getitem__(self, *args): return _pycbf.shortArray___getitem__(self, *args)
++    def __setitem__(self, *args): return _pycbf.shortArray___setitem__(self, *args)
++    def cast(self): return _pycbf.shortArray_cast(self)
++    __swig_getmethods__["frompointer"] = lambda x: _pycbf.shortArray_frompointer
++    if _newclass:frompointer = staticmethod(_pycbf.shortArray_frompointer)
++shortArray_swigregister = _pycbf.shortArray_swigregister
++shortArray_swigregister(shortArray)
++
++def shortArray_frompointer(*args):
++  return _pycbf.shortArray_frompointer(*args)
++shortArray_frompointer = _pycbf.shortArray_frompointer
++
++class longArray(_object):
++    __swig_setmethods__ = {}
++    __setattr__ = lambda self, name, value: _swig_setattr(self, longArray, name, value)
++    __swig_getmethods__ = {}
++    __getattr__ = lambda self, name: _swig_getattr(self, longArray, name)
++    __repr__ = _swig_repr
++    def __init__(self, *args): 
++        this = _pycbf.new_longArray(*args)
++        try: self.this.append(this)
++        except: self.this = this
++    __swig_destroy__ = _pycbf.delete_longArray
++    __del__ = lambda self : None;
++    def __getitem__(self, *args): return _pycbf.longArray___getitem__(self, *args)
++    def __setitem__(self, *args): return _pycbf.longArray___setitem__(self, *args)
++    def cast(self): return _pycbf.longArray_cast(self)
++    __swig_getmethods__["frompointer"] = lambda x: _pycbf.longArray_frompointer
++    if _newclass:frompointer = staticmethod(_pycbf.longArray_frompointer)
++longArray_swigregister = _pycbf.longArray_swigregister
++longArray_swigregister(longArray)
++
++def longArray_frompointer(*args):
++  return _pycbf.longArray_frompointer(*args)
++longArray_frompointer = _pycbf.longArray_frompointer
++
++CBF_INTEGER = _pycbf.CBF_INTEGER
++CBF_FLOAT = _pycbf.CBF_FLOAT
++CBF_CANONICAL = _pycbf.CBF_CANONICAL
++CBF_PACKED = _pycbf.CBF_PACKED
++CBF_PACKED_V2 = _pycbf.CBF_PACKED_V2
++CBF_BYTE_OFFSET = _pycbf.CBF_BYTE_OFFSET
++CBF_PREDICTOR = _pycbf.CBF_PREDICTOR
++CBF_NONE = _pycbf.CBF_NONE
++CBF_COMPRESSION_MASK = _pycbf.CBF_COMPRESSION_MASK
++CBF_FLAG_MASK = _pycbf.CBF_FLAG_MASK
++CBF_UNCORRELATED_SECTIONS = _pycbf.CBF_UNCORRELATED_SECTIONS
++CBF_FLAT_IMAGE = _pycbf.CBF_FLAT_IMAGE
++CBF_NO_EXPAND = _pycbf.CBF_NO_EXPAND
++PLAIN_HEADERS = _pycbf.PLAIN_HEADERS
++MIME_HEADERS = _pycbf.MIME_HEADERS
++MSG_NODIGEST = _pycbf.MSG_NODIGEST
++MSG_DIGEST = _pycbf.MSG_DIGEST
++MSG_DIGESTNOW = _pycbf.MSG_DIGESTNOW
++MSG_DIGESTWARN = _pycbf.MSG_DIGESTWARN
++PAD_1K = _pycbf.PAD_1K
++PAD_2K = _pycbf.PAD_2K
++PAD_4K = _pycbf.PAD_4K
++CBF_PARSE_BRC = _pycbf.CBF_PARSE_BRC
++CBF_PARSE_PRN = _pycbf.CBF_PARSE_PRN
++CBF_PARSE_BKT = _pycbf.CBF_PARSE_BKT
++CBF_PARSE_BRACKETS = _pycbf.CBF_PARSE_BRACKETS
++CBF_PARSE_TQ = _pycbf.CBF_PARSE_TQ
++CBF_PARSE_CIF2_DELIMS = _pycbf.CBF_PARSE_CIF2_DELIMS
++CBF_PARSE_DDLm = _pycbf.CBF_PARSE_DDLm
++CBF_PARSE_CIF2 = _pycbf.CBF_PARSE_CIF2
++CBF_PARSE_DEFINES = _pycbf.CBF_PARSE_DEFINES
++CBF_PARSE_WIDE = _pycbf.CBF_PARSE_WIDE
++CBF_PARSE_UTF8 = _pycbf.CBF_PARSE_UTF8
++HDR_DEFAULT = _pycbf.HDR_DEFAULT
++MIME_NOHEADERS = _pycbf.MIME_NOHEADERS
++CBF = _pycbf.CBF
++CIF = _pycbf.CIF
++ENC_NONE = _pycbf.ENC_NONE
++ENC_BASE64 = _pycbf.ENC_BASE64
++ENC_BASE32K = _pycbf.ENC_BASE32K
++ENC_QP = _pycbf.ENC_QP
++ENC_BASE10 = _pycbf.ENC_BASE10
++ENC_BASE16 = _pycbf.ENC_BASE16
++ENC_BASE8 = _pycbf.ENC_BASE8
++ENC_FORWARD = _pycbf.ENC_FORWARD
++ENC_BACKWARD = _pycbf.ENC_BACKWARD
++ENC_CRTERM = _pycbf.ENC_CRTERM
++ENC_LFTERM = _pycbf.ENC_LFTERM
++ENC_DEFAULT = _pycbf.ENC_DEFAULT
++
++def get_local_integer_byte_order():
++  """
++    Returns : char **bo,int *bolen
++    *args   : 
++
++    C prototype: int cbf_get_local_integer_byte_order (char ** byte_order);
++
++    CBFLib documentation:
++    DESCRIPTION
++    cbf_get_local_integer_byte_order returns the byte order of integers 
++    on the machine on which the API is being run in the form of a 
++    character string returned as the value pointed to by byte_order. 
++    cbf_get_local_real_byte_order returns the byte order of reals on the 
++    machine on which the API is being run in the form of a character 
++    string returned as the value pointed to by byte_order. 
++    cbf_get_local_real_format returns the format of floats on the machine 
++    on which the API is being run in the form of a character string 
++    returned as the value pointed to by real_format. The strings returned 
++    must not be modified in any way.
++    The values returned in byte_order may be the strings  "little_endian 
++    " or  "big-endian ". The values returned in real_format may be the 
++    strings  "ieee 754-1985 " or  "other ". Additional values may be 
++    returned by future versions of the API.
++    ARGUMENTS
++    byte_order    pointer to the returned string real_format   pointer to 
++    the returned string
++    RETURN VALUE
++    Returns an error code on failure or 0 for success.
++    ----------------------------------------------------------------------
++
++    """
++  return _pycbf.get_local_integer_byte_order()
++
++def compute_cell_volume(*args):
++  """
++    Returns : Float volume
++    *args   : double cell[6]
++
++    C prototype: int cbf_compute_cell_volume ( double cell[6], double *volume );
++
++    CBFLib documentation:
++    DESCRIPTION
++    cbf_compute_cell_volume sets *volume to point to the volume of the 
++    unit cell computed from the double values in cell[0:2] for the cell 
++    edge lengths a, b and c in AAngstroms and the double values given in 
++    cell[3:5] for the cell angles a, b and g in degrees.
++    ARGUMENTS
++    cell     Pointer to the array of 6 doubles giving the cell 
++    parameters. volume   Pointer to the doubles for cell volume.
++    RETURN VALUE
++    Returns an error code on failure or 0 for success.
++    SEE ALSO
++
++    """
++  return _pycbf.compute_cell_volume(*args)
++
++def get_local_real_format():
++  """
++    Returns : char **rf,int *rflen
++    *args   : 
++
++    C prototype: int cbf_get_local_real_format (char ** real_format );
++
++    CBFLib documentation:
++    DESCRIPTION
++    cbf_get_local_integer_byte_order returns the byte order of integers 
++    on the machine on which the API is being run in the form of a 
++    character string returned as the value pointed to by byte_order. 
++    cbf_get_local_real_byte_order returns the byte order of reals on the 
++    machine on which the API is being run in the form of a character 
++    string returned as the value pointed to by byte_order. 
++    cbf_get_local_real_format returns the format of floats on the machine 
++    on which the API is being run in the form of a character string 
++    returned as the value pointed to by real_format. The strings returned 
++    must not be modified in any way.
++    The values returned in byte_order may be the strings  "little_endian 
++    " or  "big-endian ". The values returned in real_format may be the 
++    strings  "ieee 754-1985 " or  "other ". Additional values may be 
++    returned by future versions of the API.
++    ARGUMENTS
++    byte_order    pointer to the returned string real_format   pointer to 
++    the returned string
++    RETURN VALUE
++    Returns an error code on failure or 0 for success.
++    ----------------------------------------------------------------------
++
++    """
++  return _pycbf.get_local_real_format()
++
++def get_local_real_byte_order():
++  """
++    Returns : char **bo,int *bolen
++    *args   : 
++
++    C prototype: int cbf_get_local_real_byte_order (char ** byte_order);
++
++    CBFLib documentation:
++    DESCRIPTION
++    cbf_get_local_integer_byte_order returns the byte order of integers 
++    on the machine on which the API is being run in the form of a 
++    character string returned as the value pointed to by byte_order. 
++    cbf_get_local_real_byte_order returns the byte order of reals on the 
++    machine on which the API is being run in the form of a character 
++    string returned as the value pointed to by byte_order. 
++    cbf_get_local_real_format returns the format of floats on the machine 
++    on which the API is being run in the form of a character string 
++    returned as the value pointed to by real_format. The strings returned 
++    must not be modified in any way.
++    The values returned in byte_order may be the strings  "little_endian 
++    " or  "big-endian ". The values returned in real_format may be the 
++    strings  "ieee 754-1985 " or  "other ". Additional values may be 
++    returned by future versions of the API.
++    ARGUMENTS
++    byte_order    pointer to the returned string real_format   pointer to 
++    the returned string
++    RETURN VALUE
++    Returns an error code on failure or 0 for success.
++    ----------------------------------------------------------------------
++
++    """
++  return _pycbf.get_local_real_byte_order()
++
++def compute_reciprocal_cell(*args):
++  """
++    Returns : Float astar,Float bstar,Float cstar,Float alphastar,Float betastar,
++              Float gammastar
++    *args   : double cell[6]
++
++    C prototype: int cbf_compute_reciprocal_cell ( double cell[6],
++                     double rcell[6] );
++
++    CBFLib documentation:
++    DESCRIPTION
++    cbf_compute_reciprocal_cell sets rcell to point to the array of 
++    reciprocal cell parameters computed from the double values cell[0:2] 
++    giving the cell edge lengths a, b and c in AAngstroms, and the double 
++    values cell[3:5] giving the cell angles a, b and g in degrees. The 
++    double values rcell[0:2] will be set to the reciprocal cell lengths 
++    a*, b* and c* in AAngstroms-1 and the double values rcell[3:5] will 
++    be set to the reciprocal cell angles a*, b* and g* in degrees.
++    ARGUMENTS
++    cell     Pointer to the array of 6 doubles giving the cell 
++    parameters. rcell    Pointer to the destination array of 6 doubles 
++    giving the reciprocal cell parameters. volume   Pointer to the 
++    doubles for cell volume.
++    RETURN VALUE
++    Returns an error code on failure or 0 for success.
++    SEE ALSO
++
++    """
++  return _pycbf.compute_reciprocal_cell(*args)
++class cbf_positioner_struct(_object):
++    """Proxy of C cbf_positioner_struct struct"""
++    __swig_setmethods__ = {}
++    __setattr__ = lambda self, name, value: _swig_setattr(self, cbf_positioner_struct, name, value)
++    __swig_getmethods__ = {}
++    __getattr__ = lambda self, name: _swig_getattr(self, cbf_positioner_struct, name)
++    __repr__ = _swig_repr
++    __swig_setmethods__["matrix"] = _pycbf.cbf_positioner_struct_matrix_set
++    __swig_getmethods__["matrix"] = _pycbf.cbf_positioner_struct_matrix_get
++    if _newclass:matrix = _swig_property(_pycbf.cbf_positioner_struct_matrix_get, _pycbf.cbf_positioner_struct_matrix_set)
++    __swig_setmethods__["axis"] = _pycbf.cbf_positioner_struct_axis_set
++    __swig_getmethods__["axis"] = _pycbf.cbf_positioner_struct_axis_get
++    if _newclass:axis = _swig_property(_pycbf.cbf_positioner_struct_axis_get, _pycbf.cbf_positioner_struct_axis_set)
++    __swig_setmethods__["axes"] = _pycbf.cbf_positioner_struct_axes_set
++    __swig_getmethods__["axes"] = _pycbf.cbf_positioner_struct_axes_get
++    if _newclass:axes = _swig_property(_pycbf.cbf_positioner_struct_axes_get, _pycbf.cbf_positioner_struct_axes_set)
++    __swig_setmethods__["matrix_is_valid"] = _pycbf.cbf_positioner_struct_matrix_is_valid_set
++    __swig_getmethods__["matrix_is_valid"] = _pycbf.cbf_positioner_struct_matrix_is_valid_get
++    if _newclass:matrix_is_valid = _swig_property(_pycbf.cbf_positioner_struct_matrix_is_valid_get, _pycbf.cbf_positioner_struct_matrix_is_valid_set)
++    __swig_setmethods__["axes_are_connected"] = _pycbf.cbf_positioner_struct_axes_are_connected_set
++    __swig_getmethods__["axes_are_connected"] = _pycbf.cbf_positioner_struct_axes_are_connected_get
++    if _newclass:axes_are_connected = _swig_property(_pycbf.cbf_positioner_struct_axes_are_connected_get, _pycbf.cbf_positioner_struct_axes_are_connected_set)
++    def __init__(self): 
++        """__init__(self) -> cbf_positioner_struct"""
++        this = _pycbf.new_cbf_positioner_struct()
++        try: self.this.append(this)
++        except: self.this = this
++    __swig_destroy__ = _pycbf.delete_cbf_positioner_struct
++    __del__ = lambda self : None;
++    def get_rotation_range(self):
++        """
++        Returns : Float start,Float increment
++        *args   : 
++
++        C prototype: int cbf_get_rotation_range (cbf_goniometer goniometer,
++                         unsigned int      reserved, double *start, double *increment);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_rotation_range sets *start and *increment to the 
++        corresponding values of the goniometer rotation axis used for the 
++        exposure.
++        Either of the destination pointers may be NULL.
++        The parameter reserved is presently unused and should be set to 0.
++        ARGUMENTS
++        goniometer   Goniometer handle. reserved     Unused. Any value other 
++        than 0 is invalid. start        Pointer to the destination start 
++        value. increment    Pointer to the destination increment value.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_positioner_struct_get_rotation_range(self)
++
++    def rotate_vector(self, *args):
++        """
++        Returns : double final1,double final2,double final3
++        *args   : double ratio,double initial1,double initial2,double initial3
++
++        C prototype: int cbf_rotate_vector (cbf_goniometer goniometer,
++                         unsigned int reserved,      double ratio, double initial1,
++                         double initial2, double initial3, double      *final1,
++                         double *final2, double *final3);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_rotate_vector sets *final1, *final2, and *final3 to the 3 
++        components of the of the vector (initial1, initial2, initial3) after 
++        reorientation by applying the goniometer rotations. The value ratio 
++        specif ies the goniometer setting and varies from 0.0 at the 
++        beginning of the exposure to 1.0 at the end, irrespective of the 
++        actual rotation range.
++        Any of the destination pointers may be NULL.
++        The parameter reserved is presently unused and should be set to 0.
++        ARGUMENTS
++        goniometer   Goniometer handle. reserved     Unused. Any value other 
++        than 0 is invalid. ratio        Goniometer setting. 0 = beginning of 
++        exposure, 1 = end. initial1     x component of the initial vector. 
++        initial2     y component of the initial vector. initial3     z 
++        component of the initial vector. vector1      Pointer to the 
++        destination x component of the final vector. vector2      Pointer to 
++        the destination y component of the final vector. vector3      Pointer 
++        to the destination z component of the final vector.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_positioner_struct_rotate_vector(self, *args)
++
++    def get_reciprocal(self, *args):
++        """
++        Returns : double reciprocal1,double reciprocal2,double reciprocal3
++        *args   : double ratio,double wavelength,double real1,double real2,double real3
++
++        C prototype: int cbf_get_reciprocal (cbf_goniometer goniometer,
++                         unsigned int      reserved, double ratio, double wavelength,
++                         double real1, double real2,      double real3,
++                         double *reciprocal1, double *reciprocal2,
++                         double      *reciprocal3);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_reciprocal sets *reciprocal1, * reciprocal2, and * 
++        reciprocal3 to the 3 components of the of the reciprocal-space vector 
++        corresponding to the real-space vector (real1, real2, real3). The 
++        reciprocal-space vector is oriented to correspond to the goniometer 
++        setting with all axes at 0. The value wavelength is the wavlength in 
++        AA and the value ratio specifies the current goniometer setting and 
++        varies from 0.0 at the beginning of the exposur e to 1.0 at the end, 
++        irrespective of the actual rotation range.
++        Any of the destination pointers may be NULL.
++        The parameter reserved is presently unused and should be set to 0.
++        ARGUMENTS
++        goniometer    Goniometer handle. reserved      Unused. Any value 
++        other than 0 is invalid. ratio         Goniometer setting. 0 = 
++        beginning of exposure, 1 = end. wavelength    Wavelength in AA. real1 
++                x component of the real-space vector. real2         y 
++        component of the real-space vector. real3         z component of the 
++        real-space vector. reciprocal1   Pointer to the destination x 
++        component of the reciprocal-space vector. reciprocal2   Pointer to 
++        the destination y component of the reciprocal-space vector. 
++        reciprocal3   Pointer to the destination z component of the 
++        reciprocal-space vector.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_positioner_struct_get_reciprocal(self, *args)
++
++    def get_rotation_axis(self):
++        """
++        Returns : double vector1,double vector2,double vector3
++        *args   : 
++
++        C prototype: int cbf_get_rotation_axis (cbf_goniometer goniometer,
++                         unsigned int      reserved, double *vector1, double *vector2,
++                         double *vector3);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_rotation_axis sets *vector1, *vector2, and *vector3 to the 3 
++        components of the goniometer rotation axis used for the exposure.
++        Any of the destination pointers may be NULL.
++        The parameter reserved is presently unused and should be set to 0.
++        ARGUMENTS
++        goniometer   Goniometer handle. reserved     Unused. Any value other 
++        than 0 is invalid. vector1      Pointer to the destination x 
++        component of the rotation axis. vector2      Pointer to the 
++        destination y component of the rotation axis. vector3      Pointer to 
++        the destination z component of the rotation axis.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_positioner_struct_get_rotation_axis(self)
++
++cbf_positioner_struct_swigregister = _pycbf.cbf_positioner_struct_swigregister
++cbf_positioner_struct_swigregister(cbf_positioner_struct)
++
++class cbf_detector_struct(_object):
++    """Proxy of C cbf_detector_struct struct"""
++    __swig_setmethods__ = {}
++    __setattr__ = lambda self, name, value: _swig_setattr(self, cbf_detector_struct, name, value)
++    __swig_getmethods__ = {}
++    __getattr__ = lambda self, name: _swig_getattr(self, cbf_detector_struct, name)
++    __repr__ = _swig_repr
++    __swig_setmethods__["positioner"] = _pycbf.cbf_detector_struct_positioner_set
++    __swig_getmethods__["positioner"] = _pycbf.cbf_detector_struct_positioner_get
++    if _newclass:positioner = _swig_property(_pycbf.cbf_detector_struct_positioner_get, _pycbf.cbf_detector_struct_positioner_set)
++    __swig_setmethods__["displacement"] = _pycbf.cbf_detector_struct_displacement_set
++    __swig_getmethods__["displacement"] = _pycbf.cbf_detector_struct_displacement_get
++    if _newclass:displacement = _swig_property(_pycbf.cbf_detector_struct_displacement_get, _pycbf.cbf_detector_struct_displacement_set)
++    __swig_setmethods__["increment"] = _pycbf.cbf_detector_struct_increment_set
++    __swig_getmethods__["increment"] = _pycbf.cbf_detector_struct_increment_get
++    if _newclass:increment = _swig_property(_pycbf.cbf_detector_struct_increment_get, _pycbf.cbf_detector_struct_increment_set)
++    __swig_setmethods__["axes"] = _pycbf.cbf_detector_struct_axes_set
++    __swig_getmethods__["axes"] = _pycbf.cbf_detector_struct_axes_get
++    if _newclass:axes = _swig_property(_pycbf.cbf_detector_struct_axes_get, _pycbf.cbf_detector_struct_axes_set)
++    __swig_setmethods__["index"] = _pycbf.cbf_detector_struct_index_set
++    __swig_getmethods__["index"] = _pycbf.cbf_detector_struct_index_get
++    if _newclass:index = _swig_property(_pycbf.cbf_detector_struct_index_get, _pycbf.cbf_detector_struct_index_set)
++    def __init__(self): 
++        """__init__(self) -> cbf_detector_struct"""
++        this = _pycbf.new_cbf_detector_struct()
++        try: self.this.append(this)
++        except: self.this = this
++    __swig_destroy__ = _pycbf.delete_cbf_detector_struct
++    __del__ = lambda self : None;
++    def set_beam_center_fs(self, *args):
++        """
++        Returns : 
++        *args   : double indexfast,double indexslow,double centerfast,double centerslow
++
++        C prototype: int cbf_set_beam_center_fs (cbf_detector detector,
++                         double *indexfast,      double *indexslow, double *centerfast,
++                         double *centerslow);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_beam_center sets *centerfast and *centerslow to the 
++        displacements in mm along the detector axes from pixel (0, 0) to the 
++        point at which the beam intersects the detector and *indexfast and 
++        *indexslow to the corresponding indices. cbf_set_beam_center sets the 
++        offsets in the axis category for the detector element axis with 
++        precedence 1 to place the beam center at the position given in mm by 
++        *centerfast and *centerslow as the displacements in mm along the 
++        detector axes from pixel (0, 0) to the point at which the beam 
++        intersects the detector at the indices given *indexfast and 
++        *indexslow. cbf_set_reference_beam_center sets the displacments in 
++        the array_structure_list_axis category to place the beam center at 
++        the position given in mm by *centerfast and *centerslow as the 
++        displacements in mm along the detector axes from pixel (0, 0) to the 
++        point at which the beam intersects the detector at the indices given 
++        by *indexfast and *indexslow. In order to achieve consistent results, 
++        a reference detector should be used for detector to have all axes at 
++        their reference settings.
++        Note that the precedence 1 axis is the fastest axis, so that 
++        *centerfast and *indexfast are the fast axis components of the center 
++        and *centerslow and *indexslow are the slow axis components of the 
++        center.
++        The _fs calls give the displacments in a fast-to-slow order. The 
++        calls with no suffix and the calls _sf calls give the displacements 
++        in slow-to-fast order
++        Any of the destination pointers may be NULL for getting the beam 
++        center. For setting the beam axis, either the indices of the center 
++        must not be NULL.
++        The indices are non-negative for beam centers within the detector 
++        surface, but the center for an axis with a negative increment will be 
++        negative for a beam center within the detector surface.
++        For cbf_set_beam_center if the diffrn_data_frame category exists with 
++        a row for the corresponding element id, the values will be set for 
++        _diffrn_data_frame.center_fast and _diffrn_data_frame.center_slow in 
++        millimetres and the value of _diffrn_data_frame.center_units will be 
++        set to 'mm'.
++        For cbf_set_reference_beam_center if the diffrn_detector_element 
++        category exists with a row for the corresponding element id, the 
++        values will be set for _diffrn_detector_element.reference_center_fast 
++        and _diffrn_detector_element.reference_center_slow in millimetres and 
++        the value of _diffrn_detector_element.reference_units will be set to 
++        'mm'.
++        ARGUMENTS
++        detector     Detector handle. indexfast    Pointer to the destination 
++        fast index. indexslow    Pointer to the destination slow index. 
++        centerfast   Pointer to the destination displacement along the fast 
++        axis. centerslow   Pointer to the destination displacement along the 
++        slow axis.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_detector_struct_set_beam_center_fs(self, *args)
++
++    def set_reference_beam_center_fs(self, *args):
++        """
++        Returns : 
++        *args   : double indexfast,double indexslow,double centerfast,double centerslow
++
++        C prototype: int cbf_set_reference_beam_center_fs (cbf_detector detector,
++                         double      *indexfast, double *indexslow, double *centerfast,
++                         double *centerslow);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_beam_center sets *centerfast and *centerslow to the 
++        displacements in mm along the detector axes from pixel (0, 0) to the 
++        point at which the beam intersects the detector and *indexfast and 
++        *indexslow to the corresponding indices. cbf_set_beam_center sets the 
++        offsets in the axis category for the detector element axis with 
++        precedence 1 to place the beam center at the position given in mm by 
++        *centerfast and *centerslow as the displacements in mm along the 
++        detector axes from pixel (0, 0) to the point at which the beam 
++        intersects the detector at the indices given *indexfast and 
++        *indexslow. cbf_set_reference_beam_center sets the displacments in 
++        the array_structure_list_axis category to place the beam center at 
++        the position given in mm by *centerfast and *centerslow as the 
++        displacements in mm along the detector axes from pixel (0, 0) to the 
++        point at which the beam intersects the detector at the indices given 
++        by *indexfast and *indexslow. In order to achieve consistent results, 
++        a reference detector should be used for detector to have all axes at 
++        their reference settings.
++        Note that the precedence 1 axis is the fastest axis, so that 
++        *centerfast and *indexfast are the fast axis components of the center 
++        and *centerslow and *indexslow are the slow axis components of the 
++        center.
++        The _fs calls give the displacments in a fast-to-slow order. The 
++        calls with no suffix and the calls _sf calls give the displacements 
++        in slow-to-fast order
++        Any of the destination pointers may be NULL for getting the beam 
++        center. For setting the beam axis, either the indices of the center 
++        must not be NULL.
++        The indices are non-negative for beam centers within the detector 
++        surface, but the center for an axis with a negative increment will be 
++        negative for a beam center within the detector surface.
++        For cbf_set_beam_center if the diffrn_data_frame category exists with 
++        a row for the corresponding element id, the values will be set for 
++        _diffrn_data_frame.center_fast and _diffrn_data_frame.center_slow in 
++        millimetres and the value of _diffrn_data_frame.center_units will be 
++        set to 'mm'.
++        For cbf_set_reference_beam_center if the diffrn_detector_element 
++        category exists with a row for the corresponding element id, the 
++        values will be set for _diffrn_detector_element.reference_center_fast 
++        and _diffrn_detector_element.reference_center_slow in millimetres and 
++        the value of _diffrn_detector_element.reference_units will be set to 
++        'mm'.
++        ARGUMENTS
++        detector     Detector handle. indexfast    Pointer to the destination 
++        fast index. indexslow    Pointer to the destination slow index. 
++        centerfast   Pointer to the destination displacement along the fast 
++        axis. centerslow   Pointer to the destination displacement along the 
++        slow axis.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_detector_struct_set_reference_beam_center_fs(self, *args)
++
++    def get_pixel_coordinates_fs(self, *args):
++        """
++        Returns : double coordinate1,double coordinate2,double coordinate3
++        *args   : double indexfast,double indexslow
++
++        C prototype: int cbf_get_pixel_coordinates_fs (cbf_detector detector,
++                         double      indexfast, double indexslow, double *coordinate1,
++                         double *coordinate2,      double *coordinate3);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_pixel_coordinates, cbf_get_pixel_coordinates_fs and 
++        cbf_get_pixel_coordinates_sf ses *coordinate1, *coordinate2, and 
++        *coordinate3 to the vector position of pixel (indexfast, indexslow) 
++        on the detector surface. If indexslow and indexfast are integers then 
++        the coordinates correspond to the center of a pixel.
++        Any of the destination pointers may be NULL.
++        ARGUMENTS
++        detector      Detector handle. indexslow     Slow index. indexfast    
++         Fast index. coordinate1   Pointer to the destination x component. 
++        coordinate2   Pointer to the destination y component. coordinate3   
++        Pointer to the destination z component.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_detector_struct_get_pixel_coordinates_fs(self, *args)
++
++    def get_inferred_pixel_size(self, *args):
++        """
++        Returns : Float pixel size
++        *args   : Int axis_number
++
++        C prototype: int cbf_get_inferred_pixel_size (cbf_detector detector,
++                         int axis_number,      double *psize);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_inferred_pixel_size, cbf_get_inferred_pixel_size_sf set 
++        *psize to point to the double value in millimeters of the pixel size 
++        for the axis axis_number value. The slow index is treated as axis 1 
++        and the next faster index is treated as axis 2. 
++        cbf_get_inferred_pixel_size_fs sets *psize to point to the double 
++        value in millimeters of the pixel size for the axis axis_number 
++        value. The fast index is treated as axis 1 and the next slower index 
++        is treated as axis 2.
++        If the axis number is negative, the axes are used in the reverse 
++        order so that an axis_number of -1 indicates the fast axes in a call 
++        to cbf_get_inferred_pixel_size or cbf_get_inferred_pixel_size_sf and 
++        indicates the fast axis in a call to cbf_get_inferred_pixel_size_fs.
++        ARGUMENTS
++        detector      Detector handle. axis_number   The number of the axis. 
++        area          Pointer to the destination pizel size in mm.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_detector_struct_get_inferred_pixel_size(self, *args)
++
++    def get_pixel_area(self, *args):
++        """
++        Returns : double area,double projected_area
++        *args   : double index1,double index2
++
++        C prototype: int cbf_get_pixel_area (cbf_detector detector, double indexslow,
++                         double      indexfast, double *area, double *projected_area);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_pixel_area, cbf_get_pixel_area_fs and cbf_get_pixel_area_sf 
++        set *area to the area of the pixel at (indexfast, indexslow) on the 
++        detector surface and *projected_area to the apparent area of the 
++        pixel as viewed from the sample position, with indexslow being the 
++        slow axis and indexfast being the fast axis.
++        Either of the destination pointers may be NULL.
++        ARGUMENTS
++        detector         Detector handle. indexfast        Fast index. 
++        indexslow        Slow index. area             Pointer to the 
++        destination area in mm2. projected_area   Pointer to the destination 
++        apparent area in mm2.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_detector_struct_get_pixel_area(self, *args)
++
++    def get_pixel_normal_fs(self, *args):
++        """
++        Returns : double normal1,double normal2,double normal3
++        *args   : double indexfast,double indexslow
++
++        C prototype: int cbf_get_pixel_normal_fs (cbf_detector detector,
++                         double indexfast,      double indexslow, double *normal1,
++                         double *normal2, double *normal3);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_detector_normal, cbf_get_pixel_normal_fs and 
++        cbf_get_pixel_normal_sf set *normal1, *normal2, and *normal3 to the 3 
++        components of the of the normal vector to the pixel at (indexfast, 
++        indexslow). The vector is normalized.
++        Any of the destination pointers may be NULL.
++        ARGUMENTS
++        detector    Detector handle. indexslow   Slow index. indexfast   Fast 
++        index. normal1     Pointer to the destination x component of the 
++        normal vector. normal2     Pointer to the destination y component of 
++        the normal vector. normal3     Pointer to the destination z component 
++        of the normal vector.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_detector_struct_get_pixel_normal_fs(self, *args)
++
++    def get_detector_axes(self):
++        """
++        Returns : double slowaxis1,double slowaxis2,double slowaxis3,double fastaxis1,
++                  double fastaxis2,double fastaxis3
++        *args   : 
++
++        C prototype: int cbf_get_detector_axes (cbf_detector detector,
++                         double *slowaxis1,      double *slowaxis2, double *slowaxis3,
++                         double *fastaxis1, double      *fastaxis2, double *fastaxis3);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_detector_axis_slow sets *slowaxis1, *slowaxis2, and 
++        *slowaxis3 to the 3 components of the slow axis of the specified 
++        detector at the current settings of all axes. 
++        cbf_get_detector_axis_slow sets *fastaxis1, *fastaxis2, and 
++        *fastaxis3 to the 3 components of the fast axis of the specified 
++        detector at the current settings of all axes. cbf_get_detector_axes, 
++        cbf_get_detector_axes_fs and int cbf_get_detector_axes_sf set 
++        *slowaxis1, *slowaxis2, and *slowaxis3 to the 3 components of the 
++        slow axis and *fastaxis1, *fastaxis2, and *fastaxis3 to the 3 
++        components of the fast axis of the specified detector at the current 
++        settings of all axes.
++        Any of the destination pointers may be NULL.
++        ARGUMENTS
++        detector    Detector handle. slowaxis1   Pointer to the destination x 
++        component of the slow axis vector. slowaxis2   Pointer to the 
++        destination y component of the slow axis vector. slowaxis3   Pointer 
++        to the destination z component of the slow axis vector. fastaxis1   
++        Pointer to the destination x component of the fast axis vector. 
++        fastaxis2   Pointer to the destination y component of the fast axis 
++        vector. fastaxis3   Pointer to the destination z component of the 
++        fast axis vector.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_detector_struct_get_detector_axes(self)
++
++    def set_reference_beam_center(self, *args):
++        """
++        Returns : 
++        *args   : double indexslow,double indexfast,double centerslow,double centerfast
++
++        C prototype: int cbf_set_reference_beam_center (cbf_detector detector,
++                         double      *indexslow, double *indexfast, double *centerslow,
++                         double *centerfast);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_beam_center sets *centerfast and *centerslow to the 
++        displacements in mm along the detector axes from pixel (0, 0) to the 
++        point at which the beam intersects the detector and *indexfast and 
++        *indexslow to the corresponding indices. cbf_set_beam_center sets the 
++        offsets in the axis category for the detector element axis with 
++        precedence 1 to place the beam center at the position given in mm by 
++        *centerfast and *centerslow as the displacements in mm along the 
++        detector axes from pixel (0, 0) to the point at which the beam 
++        intersects the detector at the indices given *indexfast and 
++        *indexslow. cbf_set_reference_beam_center sets the displacments in 
++        the array_structure_list_axis category to place the beam center at 
++        the position given in mm by *centerfast and *centerslow as the 
++        displacements in mm along the detector axes from pixel (0, 0) to the 
++        point at which the beam intersects the detector at the indices given 
++        by *indexfast and *indexslow. In order to achieve consistent results, 
++        a reference detector should be used for detector to have all axes at 
++        their reference settings.
++        Note that the precedence 1 axis is the fastest axis, so that 
++        *centerfast and *indexfast are the fast axis components of the center 
++        and *centerslow and *indexslow are the slow axis components of the 
++        center.
++        The _fs calls give the displacments in a fast-to-slow order. The 
++        calls with no suffix and the calls _sf calls give the displacements 
++        in slow-to-fast order
++        Any of the destination pointers may be NULL for getting the beam 
++        center. For setting the beam axis, either the indices of the center 
++        must not be NULL.
++        The indices are non-negative for beam centers within the detector 
++        surface, but the center for an axis with a negative increment will be 
++        negative for a beam center within the detector surface.
++        For cbf_set_beam_center if the diffrn_data_frame category exists with 
++        a row for the corresponding element id, the values will be set for 
++        _diffrn_data_frame.center_fast and _diffrn_data_frame.center_slow in 
++        millimetres and the value of _diffrn_data_frame.center_units will be 
++        set to 'mm'.
++        For cbf_set_reference_beam_center if the diffrn_detector_element 
++        category exists with a row for the corresponding element id, the 
++        values will be set for _diffrn_detector_element.reference_center_fast 
++        and _diffrn_detector_element.reference_center_slow in millimetres and 
++        the value of _diffrn_detector_element.reference_units will be set to 
++        'mm'.
++        ARGUMENTS
++        detector     Detector handle. indexfast    Pointer to the destination 
++        fast index. indexslow    Pointer to the destination slow index. 
++        centerfast   Pointer to the destination displacement along the fast 
++        axis. centerslow   Pointer to the destination displacement along the 
++        slow axis.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_detector_struct_set_reference_beam_center(self, *args)
++
++    def get_detector_axis_slow(self):
++        """
++        Returns : double slowaxis1,double slowaxis2,double slowaxis3
++        *args   : 
++
++        C prototype: int cbf_get_detector_axis_slow (cbf_detector detector,
++                         double      *slowaxis1, double *slowaxis2, double *slowaxis3);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_detector_axis_slow sets *slowaxis1, *slowaxis2, and 
++        *slowaxis3 to the 3 components of the slow axis of the specified 
++        detector at the current settings of all axes. 
++        cbf_get_detector_axis_slow sets *fastaxis1, *fastaxis2, and 
++        *fastaxis3 to the 3 components of the fast axis of the specified 
++        detector at the current settings of all axes. cbf_get_detector_axes, 
++        cbf_get_detector_axes_fs and int cbf_get_detector_axes_sf set 
++        *slowaxis1, *slowaxis2, and *slowaxis3 to the 3 components of the 
++        slow axis and *fastaxis1, *fastaxis2, and *fastaxis3 to the 3 
++        components of the fast axis of the specified detector at the current 
++        settings of all axes.
++        Any of the destination pointers may be NULL.
++        ARGUMENTS
++        detector    Detector handle. slowaxis1   Pointer to the destination x 
++        component of the slow axis vector. slowaxis2   Pointer to the 
++        destination y component of the slow axis vector. slowaxis3   Pointer 
++        to the destination z component of the slow axis vector. fastaxis1   
++        Pointer to the destination x component of the fast axis vector. 
++        fastaxis2   Pointer to the destination y component of the fast axis 
++        vector. fastaxis3   Pointer to the destination z component of the 
++        fast axis vector.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_detector_struct_get_detector_axis_slow(self)
++
++    def get_detector_distance(self):
++        """
++        Returns : double distance
++        *args   : 
++
++        C prototype: int cbf_get_detector_distance (cbf_detector detector,
++                         double *distance);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_detector_distance sets *distance to the nearest distance from 
++        the sample position to the detector plane.
++        ARGUMENTS
++        detector   Detector handle. distance   Pointer to the destination 
++        distance.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_detector_struct_get_detector_distance(self)
++
++    def get_inferred_pixel_size_fs(self, *args):
++        """
++        Returns : Float pixel size
++        *args   : Int axis_number
++
++        C prototype: int cbf_get_inferred_pixel_size_fs(cbf_detector detector,
++                         int      axis_number, double *psize);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_inferred_pixel_size, cbf_get_inferred_pixel_size_sf set 
++        *psize to point to the double value in millimeters of the pixel size 
++        for the axis axis_number value. The slow index is treated as axis 1 
++        and the next faster index is treated as axis 2. 
++        cbf_get_inferred_pixel_size_fs sets *psize to point to the double 
++        value in millimeters of the pixel size for the axis axis_number 
++        value. The fast index is treated as axis 1 and the next slower index 
++        is treated as axis 2.
++        If the axis number is negative, the axes are used in the reverse 
++        order so that an axis_number of -1 indicates the fast axes in a call 
++        to cbf_get_inferred_pixel_size or cbf_get_inferred_pixel_size_sf and 
++        indicates the fast axis in a call to cbf_get_inferred_pixel_size_fs.
++        ARGUMENTS
++        detector      Detector handle. axis_number   The number of the axis. 
++        area          Pointer to the destination pizel size in mm.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_detector_struct_get_inferred_pixel_size_fs(self, *args)
++
++    def get_detector_normal(self):
++        """
++        Returns : double normal1,double normal2,double normal3
++        *args   : 
++
++        C prototype: int cbf_get_detector_normal (cbf_detector detector,
++                         double *normal1,      double *normal2, double *normal3);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_detector_normal sets *normal1, *normal2, and *normal3 to the 
++        3 components of the of the normal vector to the detector plane. The 
++        vector is normalized.
++        Any of the destination pointers may be NULL.
++        ARGUMENTS
++        detector   Detector handle. normal1    Pointer to the destination x 
++        component of the normal vector. normal2    Pointer to the destination 
++        y component of the normal vector. normal3    Pointer to the 
++        destination z component of the normal vector.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_detector_struct_get_detector_normal(self)
++
++    def get_detector_axis_fast(self):
++        """
++        Returns : double fastaxis1,double fastaxis2,double fastaxis3
++        *args   : 
++
++        C prototype: int cbf_get_detector_axis_fast (cbf_detector detector,
++                         double      *fastaxis1, double *fastaxis2, double *fastaxis3);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_detector_axis_slow sets *slowaxis1, *slowaxis2, and 
++        *slowaxis3 to the 3 components of the slow axis of the specified 
++        detector at the current settings of all axes. 
++        cbf_get_detector_axis_slow sets *fastaxis1, *fastaxis2, and 
++        *fastaxis3 to the 3 components of the fast axis of the specified 
++        detector at the current settings of all axes. cbf_get_detector_axes, 
++        cbf_get_detector_axes_fs and int cbf_get_detector_axes_sf set 
++        *slowaxis1, *slowaxis2, and *slowaxis3 to the 3 components of the 
++        slow axis and *fastaxis1, *fastaxis2, and *fastaxis3 to the 3 
++        components of the fast axis of the specified detector at the current 
++        settings of all axes.
++        Any of the destination pointers may be NULL.
++        ARGUMENTS
++        detector    Detector handle. slowaxis1   Pointer to the destination x 
++        component of the slow axis vector. slowaxis2   Pointer to the 
++        destination y component of the slow axis vector. slowaxis3   Pointer 
++        to the destination z component of the slow axis vector. fastaxis1   
++        Pointer to the destination x component of the fast axis vector. 
++        fastaxis2   Pointer to the destination y component of the fast axis 
++        vector. fastaxis3   Pointer to the destination z component of the 
++        fast axis vector.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_detector_struct_get_detector_axis_fast(self)
++
++    def get_detector_axes_fs(self):
++        """get_detector_axes_fs(self)"""
++        return _pycbf.cbf_detector_struct_get_detector_axes_fs(self)
++
++    def get_detector_axes_sf(self):
++        """
++        Returns : double slowaxis1,double slowaxis2,double slowaxis3,double fastaxis1,
++                  double fastaxis2,double fastaxis3
++        *args   : 
++
++        C prototype: int cbf_get_detector_axes_sf (cbf_detector detector,
++                         double *slowaxis1,      double *slowaxis2, double *slowaxis3,
++                         double *fastaxis1, double      *fastaxis2, double *fastaxis3);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_detector_axis_slow sets *slowaxis1, *slowaxis2, and 
++        *slowaxis3 to the 3 components of the slow axis of the specified 
++        detector at the current settings of all axes. 
++        cbf_get_detector_axis_slow sets *fastaxis1, *fastaxis2, and 
++        *fastaxis3 to the 3 components of the fast axis of the specified 
++        detector at the current settings of all axes. cbf_get_detector_axes, 
++        cbf_get_detector_axes_fs and int cbf_get_detector_axes_sf set 
++        *slowaxis1, *slowaxis2, and *slowaxis3 to the 3 components of the 
++        slow axis and *fastaxis1, *fastaxis2, and *fastaxis3 to the 3 
++        components of the fast axis of the specified detector at the current 
++        settings of all axes.
++        Any of the destination pointers may be NULL.
++        ARGUMENTS
++        detector    Detector handle. slowaxis1   Pointer to the destination x 
++        component of the slow axis vector. slowaxis2   Pointer to the 
++        destination y component of the slow axis vector. slowaxis3   Pointer 
++        to the destination z component of the slow axis vector. fastaxis1   
++        Pointer to the destination x component of the fast axis vector. 
++        fastaxis2   Pointer to the destination y component of the fast axis 
++        vector. fastaxis3   Pointer to the destination z component of the 
++        fast axis vector.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_detector_struct_get_detector_axes_sf(self)
++
++    def get_pixel_coordinates_sf(self, *args):
++        """
++        Returns : double coordinate1,double coordinate2,double coordinate3
++        *args   : double indexslow,double indexfast
++
++        C prototype: int cbf_get_pixel_coordinates_sf (cbf_detector detector,
++                         double      indexslow, double indexfast, double *coordinate1,
++                         double *coordinate2,      double *coordinate3);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_pixel_coordinates, cbf_get_pixel_coordinates_fs and 
++        cbf_get_pixel_coordinates_sf ses *coordinate1, *coordinate2, and 
++        *coordinate3 to the vector position of pixel (indexfast, indexslow) 
++        on the detector surface. If indexslow and indexfast are integers then 
++        the coordinates correspond to the center of a pixel.
++        Any of the destination pointers may be NULL.
++        ARGUMENTS
++        detector      Detector handle. indexslow     Slow index. indexfast    
++         Fast index. coordinate1   Pointer to the destination x component. 
++        coordinate2   Pointer to the destination y component. coordinate3   
++        Pointer to the destination z component.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_detector_struct_get_pixel_coordinates_sf(self, *args)
++
++    def set_beam_center(self, *args):
++        """
++        Returns : 
++        *args   : double indexslow,double indexfast,double centerslow,double centerfast
++
++        C prototype: int cbf_set_beam_center (cbf_detector detector,
++                         double *indexslow,      double *indexfast, double *centerslow,
++                         double *centerfast);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_beam_center sets *centerfast and *centerslow to the 
++        displacements in mm along the detector axes from pixel (0, 0) to the 
++        point at which the beam intersects the detector and *indexfast and 
++        *indexslow to the corresponding indices. cbf_set_beam_center sets the 
++        offsets in the axis category for the detector element axis with 
++        precedence 1 to place the beam center at the position given in mm by 
++        *centerfast and *centerslow as the displacements in mm along the 
++        detector axes from pixel (0, 0) to the point at which the beam 
++        intersects the detector at the indices given *indexfast and 
++        *indexslow. cbf_set_reference_beam_center sets the displacments in 
++        the array_structure_list_axis category to place the beam center at 
++        the position given in mm by *centerfast and *centerslow as the 
++        displacements in mm along the detector axes from pixel (0, 0) to the 
++        point at which the beam intersects the detector at the indices given 
++        by *indexfast and *indexslow. In order to achieve consistent results, 
++        a reference detector should be used for detector to have all axes at 
++        their reference settings.
++        Note that the precedence 1 axis is the fastest axis, so that 
++        *centerfast and *indexfast are the fast axis components of the center 
++        and *centerslow and *indexslow are the slow axis components of the 
++        center.
++        The _fs calls give the displacments in a fast-to-slow order. The 
++        calls with no suffix and the calls _sf calls give the displacements 
++        in slow-to-fast order
++        Any of the destination pointers may be NULL for getting the beam 
++        center. For setting the beam axis, either the indices of the center 
++        must not be NULL.
++        The indices are non-negative for beam centers within the detector 
++        surface, but the center for an axis with a negative increment will be 
++        negative for a beam center within the detector surface.
++        For cbf_set_beam_center if the diffrn_data_frame category exists with 
++        a row for the corresponding element id, the values will be set for 
++        _diffrn_data_frame.center_fast and _diffrn_data_frame.center_slow in 
++        millimetres and the value of _diffrn_data_frame.center_units will be 
++        set to 'mm'.
++        For cbf_set_reference_beam_center if the diffrn_detector_element 
++        category exists with a row for the corresponding element id, the 
++        values will be set for _diffrn_detector_element.reference_center_fast 
++        and _diffrn_detector_element.reference_center_slow in millimetres and 
++        the value of _diffrn_detector_element.reference_units will be set to 
++        'mm'.
++        ARGUMENTS
++        detector     Detector handle. indexfast    Pointer to the destination 
++        fast index. indexslow    Pointer to the destination slow index. 
++        centerfast   Pointer to the destination displacement along the fast 
++        axis. centerslow   Pointer to the destination displacement along the 
++        slow axis.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_detector_struct_set_beam_center(self, *args)
++
++    def get_pixel_area_fs(self, *args):
++        """
++        Returns : double area,double projected_area
++        *args   : double indexfast,double indexslow
++
++        C prototype: int cbf_get_pixel_area_fs(cbf_detector detector,
++                         double indexfast,      double indexslow, double *area,
++                         double *projected_area);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_pixel_area, cbf_get_pixel_area_fs and cbf_get_pixel_area_sf 
++        set *area to the area of the pixel at (indexfast, indexslow) on the 
++        detector surface and *projected_area to the apparent area of the 
++        pixel as viewed from the sample position, with indexslow being the 
++        slow axis and indexfast being the fast axis.
++        Either of the destination pointers may be NULL.
++        ARGUMENTS
++        detector         Detector handle. indexfast        Fast index. 
++        indexslow        Slow index. area             Pointer to the 
++        destination area in mm2. projected_area   Pointer to the destination 
++        apparent area in mm2.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_detector_struct_get_pixel_area_fs(self, *args)
++
++    def get_beam_center_fs(self):
++        """
++        Returns : double indexfast,double indexslow,double centerfast,double centerslow
++        *args   : 
++
++        C prototype: int cbf_get_beam_center_fs (cbf_detector detector,
++                         double *indexfast,      double *indexslow, double *centerfast,
++                         double *centerslow);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_beam_center sets *centerfast and *centerslow to the 
++        displacements in mm along the detector axes from pixel (0, 0) to the 
++        point at which the beam intersects the detector and *indexfast and 
++        *indexslow to the corresponding indices. cbf_set_beam_center sets the 
++        offsets in the axis category for the detector element axis with 
++        precedence 1 to place the beam center at the position given in mm by 
++        *centerfast and *centerslow as the displacements in mm along the 
++        detector axes from pixel (0, 0) to the point at which the beam 
++        intersects the detector at the indices given *indexfast and 
++        *indexslow. cbf_set_reference_beam_center sets the displacments in 
++        the array_structure_list_axis category to place the beam center at 
++        the position given in mm by *centerfast and *centerslow as the 
++        displacements in mm along the detector axes from pixel (0, 0) to the 
++        point at which the beam intersects the detector at the indices given 
++        by *indexfast and *indexslow. In order to achieve consistent results, 
++        a reference detector should be used for detector to have all axes at 
++        their reference settings.
++        Note that the precedence 1 axis is the fastest axis, so that 
++        *centerfast and *indexfast are the fast axis components of the center 
++        and *centerslow and *indexslow are the slow axis components of the 
++        center.
++        The _fs calls give the displacments in a fast-to-slow order. The 
++        calls with no suffix and the calls _sf calls give the displacements 
++        in slow-to-fast order
++        Any of the destination pointers may be NULL for getting the beam 
++        center. For setting the beam axis, either the indices of the center 
++        must not be NULL.
++        The indices are non-negative for beam centers within the detector 
++        surface, but the center for an axis with a negative increment will be 
++        negative for a beam center within the detector surface.
++        For cbf_set_beam_center if the diffrn_data_frame category exists with 
++        a row for the corresponding element id, the values will be set for 
++        _diffrn_data_frame.center_fast and _diffrn_data_frame.center_slow in 
++        millimetres and the value of _diffrn_data_frame.center_units will be 
++        set to 'mm'.
++        For cbf_set_reference_beam_center if the diffrn_detector_element 
++        category exists with a row for the corresponding element id, the 
++        values will be set for _diffrn_detector_element.reference_center_fast 
++        and _diffrn_detector_element.reference_center_slow in millimetres and 
++        the value of _diffrn_detector_element.reference_units will be set to 
++        'mm'.
++        ARGUMENTS
++        detector     Detector handle. indexfast    Pointer to the destination 
++        fast index. indexslow    Pointer to the destination slow index. 
++        centerfast   Pointer to the destination displacement along the fast 
++        axis. centerslow   Pointer to the destination displacement along the 
++        slow axis.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_detector_struct_get_beam_center_fs(self)
++
++    def get_inferred_pixel_size_sf(self, *args):
++        """
++        Returns : Float pixel size
++        *args   : Int axis_number
++
++        C prototype: int cbf_get_inferred_pixel_size_sf(cbf_detector detector,
++                         int      axis_number, double *psize);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_inferred_pixel_size, cbf_get_inferred_pixel_size_sf set 
++        *psize to point to the double value in millimeters of the pixel size 
++        for the axis axis_number value. The slow index is treated as axis 1 
++        and the next faster index is treated as axis 2. 
++        cbf_get_inferred_pixel_size_fs sets *psize to point to the double 
++        value in millimeters of the pixel size for the axis axis_number 
++        value. The fast index is treated as axis 1 and the next slower index 
++        is treated as axis 2.
++        If the axis number is negative, the axes are used in the reverse 
++        order so that an axis_number of -1 indicates the fast axes in a call 
++        to cbf_get_inferred_pixel_size or cbf_get_inferred_pixel_size_sf and 
++        indicates the fast axis in a call to cbf_get_inferred_pixel_size_fs.
++        ARGUMENTS
++        detector      Detector handle. axis_number   The number of the axis. 
++        area          Pointer to the destination pizel size in mm.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_detector_struct_get_inferred_pixel_size_sf(self, *args)
++
++    def get_pixel_coordinates(self, *args):
++        """
++        Returns : double coordinate1,double coordinate2,double coordinate3
++        *args   : double index1,double index2
++
++        C prototype: int cbf_get_pixel_coordinates (cbf_detector detector,
++                         double indexslow,      double indexfast, double *coordinate1,
++                         double *coordinate2, double      *coordinate3);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_pixel_coordinates, cbf_get_pixel_coordinates_fs and 
++        cbf_get_pixel_coordinates_sf ses *coordinate1, *coordinate2, and 
++        *coordinate3 to the vector position of pixel (indexfast, indexslow) 
++        on the detector surface. If indexslow and indexfast are integers then 
++        the coordinates correspond to the center of a pixel.
++        Any of the destination pointers may be NULL.
++        ARGUMENTS
++        detector      Detector handle. indexslow     Slow index. indexfast    
++         Fast index. coordinate1   Pointer to the destination x component. 
++        coordinate2   Pointer to the destination y component. coordinate3   
++        Pointer to the destination z component.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_detector_struct_get_pixel_coordinates(self, *args)
++
++    def get_beam_center_sf(self):
++        """
++        Returns : double indexslow,double indexfast,double centerslow,double centerfast
++        *args   : 
++
++        C prototype: int cbf_get_beam_center_sf (cbf_detector detector,
++                         double *indexslow,      double *indexfast, double *centerslow,
++                         double *centerfast);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_beam_center sets *centerfast and *centerslow to the 
++        displacements in mm along the detector axes from pixel (0, 0) to the 
++        point at which the beam intersects the detector and *indexfast and 
++        *indexslow to the corresponding indices. cbf_set_beam_center sets the 
++        offsets in the axis category for the detector element axis with 
++        precedence 1 to place the beam center at the position given in mm by 
++        *centerfast and *centerslow as the displacements in mm along the 
++        detector axes from pixel (0, 0) to the point at which the beam 
++        intersects the detector at the indices given *indexfast and 
++        *indexslow. cbf_set_reference_beam_center sets the displacments in 
++        the array_structure_list_axis category to place the beam center at 
++        the position given in mm by *centerfast and *centerslow as the 
++        displacements in mm along the detector axes from pixel (0, 0) to the 
++        point at which the beam intersects the detector at the indices given 
++        by *indexfast and *indexslow. In order to achieve consistent results, 
++        a reference detector should be used for detector to have all axes at 
++        their reference settings.
++        Note that the precedence 1 axis is the fastest axis, so that 
++        *centerfast and *indexfast are the fast axis components of the center 
++        and *centerslow and *indexslow are the slow axis components of the 
++        center.
++        The _fs calls give the displacments in a fast-to-slow order. The 
++        calls with no suffix and the calls _sf calls give the displacements 
++        in slow-to-fast order
++        Any of the destination pointers may be NULL for getting the beam 
++        center. For setting the beam axis, either the indices of the center 
++        must not be NULL.
++        The indices are non-negative for beam centers within the detector 
++        surface, but the center for an axis with a negative increment will be 
++        negative for a beam center within the detector surface.
++        For cbf_set_beam_center if the diffrn_data_frame category exists with 
++        a row for the corresponding element id, the values will be set for 
++        _diffrn_data_frame.center_fast and _diffrn_data_frame.center_slow in 
++        millimetres and the value of _diffrn_data_frame.center_units will be 
++        set to 'mm'.
++        For cbf_set_reference_beam_center if the diffrn_detector_element 
++        category exists with a row for the corresponding element id, the 
++        values will be set for _diffrn_detector_element.reference_center_fast 
++        and _diffrn_detector_element.reference_center_slow in millimetres and 
++        the value of _diffrn_detector_element.reference_units will be set to 
++        'mm'.
++        ARGUMENTS
++        detector     Detector handle. indexfast    Pointer to the destination 
++        fast index. indexslow    Pointer to the destination slow index. 
++        centerfast   Pointer to the destination displacement along the fast 
++        axis. centerslow   Pointer to the destination displacement along the 
++        slow axis.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_detector_struct_get_beam_center_sf(self)
++
++    def get_pixel_area_sf(self, *args):
++        """
++        Returns : double area,double projected_area
++        *args   : double indexslow,double indexfast
++
++        C prototype: int cbf_get_pixel_area_sf(cbf_detector detector,
++                         double indexslow,      double indexfast, double *area,
++                         double *projected_area);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_pixel_area, cbf_get_pixel_area_fs and cbf_get_pixel_area_sf 
++        set *area to the area of the pixel at (indexfast, indexslow) on the 
++        detector surface and *projected_area to the apparent area of the 
++        pixel as viewed from the sample position, with indexslow being the 
++        slow axis and indexfast being the fast axis.
++        Either of the destination pointers may be NULL.
++        ARGUMENTS
++        detector         Detector handle. indexfast        Fast index. 
++        indexslow        Slow index. area             Pointer to the 
++        destination area in mm2. projected_area   Pointer to the destination 
++        apparent area in mm2.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_detector_struct_get_pixel_area_sf(self, *args)
++
++    def get_beam_center(self):
++        """
++        Returns : double index1,double index2,double center1,double center2
++        *args   : 
++
++        C prototype: int cbf_get_beam_center (cbf_detector detector,
++                         double *indexslow,      double *indexfast, double *centerslow,
++                         double *centerfast);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_beam_center sets *centerfast and *centerslow to the 
++        displacements in mm along the detector axes from pixel (0, 0) to the 
++        point at which the beam intersects the detector and *indexfast and 
++        *indexslow to the corresponding indices. cbf_set_beam_center sets the 
++        offsets in the axis category for the detector element axis with 
++        precedence 1 to place the beam center at the position given in mm by 
++        *centerfast and *centerslow as the displacements in mm along the 
++        detector axes from pixel (0, 0) to the point at which the beam 
++        intersects the detector at the indices given *indexfast and 
++        *indexslow. cbf_set_reference_beam_center sets the displacments in 
++        the array_structure_list_axis category to place the beam center at 
++        the position given in mm by *centerfast and *centerslow as the 
++        displacements in mm along the detector axes from pixel (0, 0) to the 
++        point at which the beam intersects the detector at the indices given 
++        by *indexfast and *indexslow. In order to achieve consistent results, 
++        a reference detector should be used for detector to have all axes at 
++        their reference settings.
++        Note that the precedence 1 axis is the fastest axis, so that 
++        *centerfast and *indexfast are the fast axis components of the center 
++        and *centerslow and *indexslow are the slow axis components of the 
++        center.
++        The _fs calls give the displacments in a fast-to-slow order. The 
++        calls with no suffix and the calls _sf calls give the displacements 
++        in slow-to-fast order
++        Any of the destination pointers may be NULL for getting the beam 
++        center. For setting the beam axis, either the indices of the center 
++        must not be NULL.
++        The indices are non-negative for beam centers within the detector 
++        surface, but the center for an axis with a negative increment will be 
++        negative for a beam center within the detector surface.
++        For cbf_set_beam_center if the diffrn_data_frame category exists with 
++        a row for the corresponding element id, the values will be set for 
++        _diffrn_data_frame.center_fast and _diffrn_data_frame.center_slow in 
++        millimetres and the value of _diffrn_data_frame.center_units will be 
++        set to 'mm'.
++        For cbf_set_reference_beam_center if the diffrn_detector_element 
++        category exists with a row for the corresponding element id, the 
++        values will be set for _diffrn_detector_element.reference_center_fast 
++        and _diffrn_detector_element.reference_center_slow in millimetres and 
++        the value of _diffrn_detector_element.reference_units will be set to 
++        'mm'.
++        ARGUMENTS
++        detector     Detector handle. indexfast    Pointer to the destination 
++        fast index. indexslow    Pointer to the destination slow index. 
++        centerfast   Pointer to the destination displacement along the fast 
++        axis. centerslow   Pointer to the destination displacement along the 
++        slow axis.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_detector_struct_get_beam_center(self)
++
++    def set_reference_beam_center_sf(self):
++        """
++        Returns : 
++        *args   : double indexslow,double indexfast,double centerslow,double centerfast
++
++        C prototype: int cbf_set_reference_beam_center_sf (cbf_detector detector,
++                         double      *indexslow, double *indexfast, double *centerslow,
++                         double *centerfast);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_beam_center sets *centerfast and *centerslow to the 
++        displacements in mm along the detector axes from pixel (0, 0) to the 
++        point at which the beam intersects the detector and *indexfast and 
++        *indexslow to the corresponding indices. cbf_set_beam_center sets the 
++        offsets in the axis category for the detector element axis with 
++        precedence 1 to place the beam center at the position given in mm by 
++        *centerfast and *centerslow as the displacements in mm along the 
++        detector axes from pixel (0, 0) to the point at which the beam 
++        intersects the detector at the indices given *indexfast and 
++        *indexslow. cbf_set_reference_beam_center sets the displacments in 
++        the array_structure_list_axis category to place the beam center at 
++        the position given in mm by *centerfast and *centerslow as the 
++        displacements in mm along the detector axes from pixel (0, 0) to the 
++        point at which the beam intersects the detector at the indices given 
++        by *indexfast and *indexslow. In order to achieve consistent results, 
++        a reference detector should be used for detector to have all axes at 
++        their reference settings.
++        Note that the precedence 1 axis is the fastest axis, so that 
++        *centerfast and *indexfast are the fast axis components of the center 
++        and *centerslow and *indexslow are the slow axis components of the 
++        center.
++        The _fs calls give the displacments in a fast-to-slow order. The 
++        calls with no suffix and the calls _sf calls give the displacements 
++        in slow-to-fast order
++        Any of the destination pointers may be NULL for getting the beam 
++        center. For setting the beam axis, either the indices of the center 
++        must not be NULL.
++        The indices are non-negative for beam centers within the detector 
++        surface, but the center for an axis with a negative increment will be 
++        negative for a beam center within the detector surface.
++        For cbf_set_beam_center if the diffrn_data_frame category exists with 
++        a row for the corresponding element id, the values will be set for 
++        _diffrn_data_frame.center_fast and _diffrn_data_frame.center_slow in 
++        millimetres and the value of _diffrn_data_frame.center_units will be 
++        set to 'mm'.
++        For cbf_set_reference_beam_center if the diffrn_detector_element 
++        category exists with a row for the corresponding element id, the 
++        values will be set for _diffrn_detector_element.reference_center_fast 
++        and _diffrn_detector_element.reference_center_slow in millimetres and 
++        the value of _diffrn_detector_element.reference_units will be set to 
++        'mm'.
++        ARGUMENTS
++        detector     Detector handle. indexfast    Pointer to the destination 
++        fast index. indexslow    Pointer to the destination slow index. 
++        centerfast   Pointer to the destination displacement along the fast 
++        axis. centerslow   Pointer to the destination displacement along the 
++        slow axis.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_detector_struct_set_reference_beam_center_sf(self)
++
++    def set_beam_center_sf(self):
++        """
++        Returns : 
++        *args   : double indexslow,double indexfast,double centerslow,double centerfast
++
++        C prototype: int cbf_set_beam_center_sf (cbf_detector detector,
++                         double *indexslow,      double *indexfast, double *centerslow,
++                         double *centerfast);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_beam_center sets *centerfast and *centerslow to the 
++        displacements in mm along the detector axes from pixel (0, 0) to the 
++        point at which the beam intersects the detector and *indexfast and 
++        *indexslow to the corresponding indices. cbf_set_beam_center sets the 
++        offsets in the axis category for the detector element axis with 
++        precedence 1 to place the beam center at the position given in mm by 
++        *centerfast and *centerslow as the displacements in mm along the 
++        detector axes from pixel (0, 0) to the point at which the beam 
++        intersects the detector at the indices given *indexfast and 
++        *indexslow. cbf_set_reference_beam_center sets the displacments in 
++        the array_structure_list_axis category to place the beam center at 
++        the position given in mm by *centerfast and *centerslow as the 
++        displacements in mm along the detector axes from pixel (0, 0) to the 
++        point at which the beam intersects the detector at the indices given 
++        by *indexfast and *indexslow. In order to achieve consistent results, 
++        a reference detector should be used for detector to have all axes at 
++        their reference settings.
++        Note that the precedence 1 axis is the fastest axis, so that 
++        *centerfast and *indexfast are the fast axis components of the center 
++        and *centerslow and *indexslow are the slow axis components of the 
++        center.
++        The _fs calls give the displacments in a fast-to-slow order. The 
++        calls with no suffix and the calls _sf calls give the displacements 
++        in slow-to-fast order
++        Any of the destination pointers may be NULL for getting the beam 
++        center. For setting the beam axis, either the indices of the center 
++        must not be NULL.
++        The indices are non-negative for beam centers within the detector 
++        surface, but the center for an axis with a negative increment will be 
++        negative for a beam center within the detector surface.
++        For cbf_set_beam_center if the diffrn_data_frame category exists with 
++        a row for the corresponding element id, the values will be set for 
++        _diffrn_data_frame.center_fast and _diffrn_data_frame.center_slow in 
++        millimetres and the value of _diffrn_data_frame.center_units will be 
++        set to 'mm'.
++        For cbf_set_reference_beam_center if the diffrn_detector_element 
++        category exists with a row for the corresponding element id, the 
++        values will be set for _diffrn_detector_element.reference_center_fast 
++        and _diffrn_detector_element.reference_center_slow in millimetres and 
++        the value of _diffrn_detector_element.reference_units will be set to 
++        'mm'.
++        ARGUMENTS
++        detector     Detector handle. indexfast    Pointer to the destination 
++        fast index. indexslow    Pointer to the destination slow index. 
++        centerfast   Pointer to the destination displacement along the fast 
++        axis. centerslow   Pointer to the destination displacement along the 
++        slow axis.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_detector_struct_set_beam_center_sf(self)
++
++    def get_pixel_normal(self, *args):
++        """
++        Returns : double normal1,double normal2,double normal3
++        *args   : double index1,double index2
++
++        C prototype: int cbf_get_pixel_normal (cbf_detector detector,
++                         double indexslow,      double indexfast, double *normal1,
++                         double *normal2, double *normal3);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_detector_normal, cbf_get_pixel_normal_fs and 
++        cbf_get_pixel_normal_sf set *normal1, *normal2, and *normal3 to the 3 
++        components of the of the normal vector to the pixel at (indexfast, 
++        indexslow). The vector is normalized.
++        Any of the destination pointers may be NULL.
++        ARGUMENTS
++        detector    Detector handle. indexslow   Slow index. indexfast   Fast 
++        index. normal1     Pointer to the destination x component of the 
++        normal vector. normal2     Pointer to the destination y component of 
++        the normal vector. normal3     Pointer to the destination z component 
++        of the normal vector.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_detector_struct_get_pixel_normal(self, *args)
++
++cbf_detector_struct_swigregister = _pycbf.cbf_detector_struct_swigregister
++cbf_detector_struct_swigregister(cbf_detector_struct)
++
++CBF_UNDEFNODE = _pycbf.CBF_UNDEFNODE
++CBF_LINK = _pycbf.CBF_LINK
++CBF_ROOT = _pycbf.CBF_ROOT
++CBF_DATABLOCK = _pycbf.CBF_DATABLOCK
++CBF_SAVEFRAME = _pycbf.CBF_SAVEFRAME
++CBF_CATEGORY = _pycbf.CBF_CATEGORY
++CBF_COLUMN = _pycbf.CBF_COLUMN
++class cbf_handle_struct(_object):
++    """Proxy of C cbf_handle_struct struct"""
++    __swig_setmethods__ = {}
++    __setattr__ = lambda self, name, value: _swig_setattr(self, cbf_handle_struct, name, value)
++    __swig_getmethods__ = {}
++    __getattr__ = lambda self, name: _swig_getattr(self, cbf_handle_struct, name)
++    __repr__ = _swig_repr
++    __swig_setmethods__["node"] = _pycbf.cbf_handle_struct_node_set
++    __swig_getmethods__["node"] = _pycbf.cbf_handle_struct_node_get
++    if _newclass:node = _swig_property(_pycbf.cbf_handle_struct_node_get, _pycbf.cbf_handle_struct_node_set)
++    __swig_setmethods__["row"] = _pycbf.cbf_handle_struct_row_set
++    __swig_getmethods__["row"] = _pycbf.cbf_handle_struct_row_get
++    if _newclass:row = _swig_property(_pycbf.cbf_handle_struct_row_get, _pycbf.cbf_handle_struct_row_set)
++    __swig_setmethods__["search_row"] = _pycbf.cbf_handle_struct_search_row_set
++    __swig_getmethods__["search_row"] = _pycbf.cbf_handle_struct_search_row_get
++    if _newclass:search_row = _swig_property(_pycbf.cbf_handle_struct_search_row_get, _pycbf.cbf_handle_struct_search_row_set)
++    def __init__(self): 
++        """__init__(self) -> cbf_handle_struct"""
++        this = _pycbf.new_cbf_handle_struct()
++        try: self.this.append(this)
++        except: self.this = this
++    __swig_destroy__ = _pycbf.delete_cbf_handle_struct
++    __del__ = lambda self : None;
++    def select_datablock(self, *args):
++        """
++        Returns : 
++        *args   : Integer
++
++        C prototype: int cbf_select_datablock (cbf_handle handle,
++                         unsigned int datablock);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_select_datablock selects data block number datablock as the 
++        current data block.
++        The first data block is number 0.
++        If the data block does not exist, the function returns CBF_NOTFOUND.
++        ARGUMENTS
++        handle      CBF handle. datablock   Number of the data block to 
++        select.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_select_datablock(self, *args)
++
++    def force_new_datablock(self, *args):
++        """
++        Returns : string
++        *args   : 
++
++        C prototype: int cbf_force_new_datablock (cbf_handle handle,
++                         const char    *datablockname);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_force_new_datablock creates a new data block with name 
++        datablockname and makes it the current data block. Duplicate data 
++        block names are allowed. cbf_force_new_saveframe creates a new savew 
++        frame with name saveframename and makes it the current save frame. 
++        Duplicate save frame names are allowed.
++        Even if a save frame with this name already exists, a new save frame 
++        is created and becomes the current save frame.
++        ARGUMENTS
++        handle          CBF handle. datablockname   The name of the new data 
++        block. saveframename   The name of the new save frame.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_force_new_datablock(self, *args)
++
++    def get_3d_image_fs_as_string(self, *args):
++        """
++        Returns : (Binary)String
++        *args   : int element_number,int elsize,int elsign,int ndimfast,int ndimmid,
++                  int ndimslow
++
++        C prototype: int cbf_get_3d_image_fs (cbf_handle handle,
++                         unsigned int reserved,      unsigned int element_number,
++                         void *array, size_t elsize, int elsign,      size_t ndimfast,
++                         size_t ndimmid, size_t ndimslow);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_image, cbf_get_image_fs and cbf_get_image_sf read the image 
++        array for element number element_number into an array. The array 
++        consists of ndimslow *ndimfast elements of elsize bytes each, 
++        starting at array. The elements are signed if elsign is non-0 and 
++        unsigned otherwise. cbf_get_real_image, cbf_get_real_image_fs and 
++        cbf_get_real_image_sf read the image array of IEEE doubles or floats 
++        for element number element_number into an array. A real array is 
++        always signed. cbf_get_3d_image, cbf_get_3d_image_fs and 
++        cbf_get_3d_image_sf read the 3D image array for element number 
++        element_number into an array. The array consists of ndimslow *ndimmid 
++        *ndimfast elements of elsize bytes each, starting at array. The 
++        elements are signed if elsign is non-0 and unsigned otherwise. 
++        cbf_get_real_3d_image, cbf_get_real_3d_image_fs, 
++        cbf_get_real_3d_image_sf reads the 3D image array of IEEE doubles or 
++        floats for element number element_number into an array. A real array 
++        is always signed.
++        The _fs calls give the dimensions in a fast-to-slow order. The calls 
++        with no suffix and the calls _sf calls give the dimensions in 
++        slow-to-fast order
++        The structure of the array as a 1-, 2- or 3-dimensional array should 
++        agree with the structure of the array given in the 
++        ARRAY_STRUCTURE_LIST category. If the array is 1-dimensional, 
++        ndimslow should be the array size and ndimfast and, for the 3D calls, 
++        ndimmid, should be set to 1 both in the call and in the imgCIF data 
++        being processed. If the array is 2-dimensional and a 3D call is used, 
++        ndimslow and ndimmid should be the
++
++        """
++        return _pycbf.cbf_handle_struct_get_3d_image_fs_as_string(self, *args)
++
++    def reset_datablocks(self, *args):
++        """
++        Returns : 
++        *args   : 
++
++        C prototype: int cbf_reset_datablocks (cbf_handle handle);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_reset_datablocks deletes all categories from all data blocks.
++        The current data block does not change.
++        ARGUMENTS
++        handle   CBF handle.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_reset_datablocks(self, *args)
++
++    def set_tag_category(self, *args):
++        """
++        Returns : 
++        *args   : String tagname,String categoryname_in
++
++        C prototype: int cbf_set_tag_category (cbf_handle handle, const char* tagname,
++                         const      char* categoryname_in);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_find_tag_category sets categoryname to the category associated 
++        with tagname in the dictionary associated with handle. 
++        cbf_set_tag_category upddates the dictionary associated with handle 
++        to indicated that tagname is in category categoryname_in.
++        ARGUMENTS
++        handle            CBF handle. tagname           tag name. 
++        categoryname      pointer to a returned category name. 
++        categoryname_in   input category name.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_tag_category(self, *args)
++
++    def require_tag_root(self, *args):
++        """
++        Returns : String tagroot
++        *args   : String tagname
++
++        C prototype: int cbf_require_tag_root (cbf_handle handle, const char* tagname,
++                         const      char** tagroot);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_find_tag_root sets *tagroot to the root tag of which tagname is 
++        an alias. cbf_set_tag_root sets tagname as an alias of tagroot_in in 
++        the dictionary associated with handle, creating the dictionary if 
++        necessary. cbf_require_tag_root sets *tagroot to the root tag of 
++        which tagname is an alias, if there is one, or to the value of 
++        tagname, if tagname is not an alias.
++        A returned tagroot string must not be modified in any way.
++        ARGUMENTS
++        handle       CBF handle. tagname      tag name which may be an alias. 
++        tagroot      pointer to a returned tag root name. tagroot_in   input 
++        tag root name.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_require_tag_root(self, *args)
++
++    def row_number(self, *args):
++        """
++        Returns : Integer
++        *args   : 
++
++        C prototype: int cbf_row_number (cbf_handle handle, unsigned int *row);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_row_number sets *row to the number of the current row of the 
++        current category.
++        ARGUMENTS
++        handle   CBF handle. row      Pointer to the destination row number.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_row_number(self, *args)
++
++    def set_image(self, *args):
++        """
++        Returns : 
++        *args   : int element_number,int compression,(binary) String data,int elsize,
++                  int elsign,int dimslow,int dimfast
++
++        C prototype: int cbf_set_image (cbf_handle handle, unsigned int reserved,
++                         unsigned      int element_number, unsigned int compression,
++                         void *array, size_t      elsize, int elsign, size_t ndimslow,
++                         size_t ndimfast);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_image, cbf_set_image_fs and cbf_set_image_sf write the image 
++        array for element number element_number. The array consists of 
++        ndimfast *ndimslow elements of elsize bytes each, starting at array. 
++        The elements are signed if elsign is non-zero and unsigned otherwise. 
++        cbf_set_real_image, cbf_set_real_image_fs and cbf_set_real_image_sf 
++        write the image array for element number element_number. The array 
++        consists of ndimfast *ndimslow IEEE double or float elements of 
++        elsize bytes each, starting at array. cbf_set_3d_image, 
++        cbf_set_3d_image_fs and cbf_set_3d_image_sf write the 3D image array 
++        for element number element_number. The array consists of ndimfast 
++        *ndimmid *ndimslow elements of elsize bytes each, starting at array. 
++        The elements are signed if elsign is non-0 and unsigned otherwise. 
++        cbf_set_real_3d_image, cbf_set_real_3d_image_fs and 
++        cbf_set_real_3d_image_sf writes the 3D image array for element number 
++        element_number. The array consists of ndimfast *ndimmid *ndimslow 
++        IEEE double or float elements of elsize bytes each, starting at 
++        array.
++        The _fs calls give the dimensions in a fast-to-slow order. The calls 
++        with no suffix and the calls _sf calls give the dimensions in 
++        slow-to-fast order
++        If the array is 1-dimensional, ndimslow should be the array size and 
++        ndimfast and, for the 3D calls, ndimmid, should be set to 1. If the 
++        array is 2-dimensional and the 3D calls are used, ndimslow and 
++        ndimmid should be used for the array dimensions and ndimfast should 
++        be set to 1.
++        The array will be compressed using the compression scheme specifed by 
++        compression. Currently, the available schemes are:
++        CBF_CANONICAL   Canonical-code compression (section 3.3.1) CBF_PACKED 
++             CCP4-style packing (section 3.3.2) CBF_PACKED_V2     CCP4-style 
++        packing, version 2 (section 3.3.2) CBF_BYTE_OFFSET   Simple  
++        "byte_offset " compression. CBF_NONE        No compression.
++        The values compressed are limited to 64 bits. If any element in the 
++        array is larger than 64 bits, the value compressed is the nearest 
++        64-bit value.
++        Currently, the source array must consist of chars, shorts or ints 
++        (signed or unsigned)for cbf_set_image, or IEEE doubles or floats for 
++        cbf_set_real_image. If elsize is not equal to sizeof (short), sizeof 
++        (int), sizeof(double) or sizeof(float), the function returns 
++        CBF_ARGUMENT.
++        The parameter reserved is presently unused and should be set to 0.
++        ARGUMENTS
++        handle           CBF handle. reserved         Unused. Any value other 
++        than 0 is invalid. element_number   The number of the detector 
++        element counting from 0 by order of appearance in the  
++        "diffrn_data_frame " category. compression      Compression type. 
++        array            Pointer to the image array. elsize           Size in 
++        bytes of each image array element. elsigned         Set to non-0 if 
++        the image array elements are signed. ndimslow         Slowest array 
++        dimension. ndimmid          Second slowest array dimension. ndimfast  
++               Fastest array dimension.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_image(self, *args)
++
++    def set_bin_sizes(self, *args):
++        """
++        Returns : 
++        *args   : Integer element_number,Float slowbinsize_in,Float fastbinsize_in
++
++        C prototype: int cbf_set_bin_sizes(cbf_handle handle,
++                         unsigned int element_number,      double slowbinsize_in,
++                        double fastbinsize_in);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_bin_sizes sets slowbinsize to point to the value of the 
++        number of pixels composing one array element in the dimension that 
++        changes at the second-fastest rate and fastbinsize to point to the 
++        value of the number of pixels composing one array element in the 
++        dimension that changes at the fastest rate for the dectector element 
++        with the ordinal element_number. cbf_set_bin_sizes sets the the pixel 
++        bin sizes in the  "array_intensities " category to the values of 
++        slowbinsize_in for the number of pixels composing one array element 
++        in the dimension that changes at the second-fastest rate and 
++        fastbinsize_in for the number of pixels composing one array element 
++        in the dimension that changes at the fastest rate for the dectector 
++        element with the ordinal element_number.
++        In order to allow for software binning involving fractions of pixels, 
++        the bin sizes are doubles rather than ints.
++        ARGUMENTS
++        handle           CBF handle. element_number   The number of the 
++        detector element counting from 0 by order of appearance in the  
++        "diffrn_data_frame " category. slowbinsize      Pointer to the 
++        returned number of pixels composing one array element in the 
++        dimension that changes at the second-fastest rate. fastbinsize      
++        Pointer to the returned number of pixels composing one array element 
++        in the dimension that changes at the fastest rate. slowbinsize_in   
++        The number of pixels composing one array element in the dimension 
++        that changes at the second-fastest rate. fastbinsize_in   The number 
++        of pixels composing one array element in the dimension that changes 
++        at the fastest rate.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_bin_sizes(self, *args)
++
++    def new_row(self, *args):
++        """
++        Returns : 
++        *args   : 
++
++        C prototype: int cbf_new_row (cbf_handle handle);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_new_row adds a new row to the current category and makes it the 
++        current row.
++        ARGUMENTS
++        handle   CBF handle.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_new_row(self, *args)
++
++    def rewind_saveframe(self, *args):
++        """
++        Returns : 
++        *args   : 
++
++        C prototype: int cbf_rewind_saveframe (cbf_handle handle);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_rewind_category makes the first category in the current data 
++        block the current category. cbf_rewind_saveframe makes the first 
++        saveframe in the current data block the current saveframe. 
++        cbf_rewind_blockitem makes the first blockitem (category or 
++        saveframe) in the current data block the current blockitem. The type 
++        of the blockitem (CBF_CATEGORY or CBF_SAVEFRAME) is returned in type.
++        If there are no categories, saveframes or blockitems the function 
++        returns CBF_NOTFOUND.
++        The current column and row become undefined.
++        ARGUMENTS
++        handle   CBF handle. type     CBF handle.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_rewind_saveframe(self, *args)
++
++    def get_realarrayparameters(self):
++        """
++        Returns : int compression,int binary_id,int elsize,int elements
++        *args   : 
++
++        C prototype: int cbf_get_realarrayparameters (cbf_handle handle,
++                         unsigned int    *compression, int *binary_id, size_t *elsize,
++                         size_t *elements);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_integerarrayparameters sets *compression, *binary_id, 
++        *elsize, *elsigned, *elunsigned, *elements, *minelement and 
++        *maxelement to values read from the binary value of the item at the 
++        current column and row. This provides all the arguments needed for a 
++        subsequent call to cbf_set_integerarray, if a copy of the array is to 
++        be made into another CIF or CBF. cbf_get_realarrayparameters sets 
++        *compression, *binary_id, *elsize, *elements to values read from the 
++        binary value of the item at the current column and row. This provides 
++        all the arguments needed for a subsequent call to cbf_set_realarray, 
++        if a copy of the arry is to be made into another CIF or CBF.
++        The variants cbf_get_integerarrayparameters_wdims, 
++        cbf_get_integerarrayparameters_wdims_fs, 
++        cbf_get_integerarrayparameters_wdims_sf, 
++        cbf_get_realarrayparameters_wdims, 
++        cbf_get_realarrayparameters_wdims_fs, 
++        cbf_get_realarrayparameters_wdims_sf set **byteorder, *dimfast, 
++        *dimmid, *dimslow, and *padding as well, providing the additional 
++        parameters needed for a subsequent call to cbf_set_integerarray_wdims 
++        or cbf_set_realarray_wdims.
++        The value returned in *byteorder is a pointer either to the string  
++        "little_endian " or to the string  "big_endian ". This should be 
++        the byte order of the data, not necessarily of the host machine. No 
++        attempt should be made to modify this string. At this time only  
++        "little_endian " will be returned.
++        The values returned in *dimfast, *dimmid and *dimslow are the sizes 
++        of the fastest changing, second fastest changing and third fastest 
++        changing dimensions of the array, if specified, or zero, if not 
++        specified.
++        The value returned in *padding is the size of the post-data padding, 
++        if any and if specified in the data header. The value is given as a 
++        count of octets.
++        If the value is not binary, the function returns CBF_ASCII.
++        ARGUMENTS
++        handle        CBF handle. compression   Compression method used. 
++        elsize        Size in bytes of each array element. binary_id     
++        Pointer to the destination integer binary identifier. elsigned      
++        Pointer to an integer. Set to 1 if the elements can be read as signed 
++        integers. elunsigned    Pointer to an integer. Set to 1 if the 
++        elements can be read as unsigned integers. elements      Pointer to 
++        the destination number of elements. minelement    Pointer to the 
++        destination smallest element. maxelement    Pointer to the 
++        destination largest element. byteorder     Pointer to the destination 
++        byte order. dimfast       Pointer to the destination fastest 
++        dimension. dimmid        Pointer to the destination second fastest 
++        dimension. dimslow       Pointer to the destination third fastest 
++        dimension. padding       Pointer to the destination padding size.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_get_realarrayparameters(self)
++
++    def get_pixel_size_sf(self, *args):
++        """
++        Returns : Float pixel_size
++        *args   : Int element_number,Int axis_number
++
++        C prototype: int cbf_get_pixel_size_sf(cbf_handle handle,
++                         unsigned int      element_number, int axis_number,
++                         double *psize);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_pixel_size and cbf_get_pixel_size_sf set *psize to point to 
++        the double value in millimeters of the axis axis_number of the 
++        detector element element_number. The axis_number is numbered from 1, 
++        starting with the slowest axis. cbf_get_pixel_size_fs sets *psize to 
++        point to the double value in millimeters of the axis axis_number of 
++        the detector element element_number. The axis_number is numbered from 
++        1, starting with the fastest axis.
++        If a negative axis number is given, the order of axes is reversed, so 
++        that -1 specifies the slowest axis for cbf_get_pixel_size_fs and the 
++        fastest axis for cbf_get_pixel_size_sf.
++        If the pixel size is not given explcitly in the  "array_element_size 
++        " category, the function returns CBF_NOTFOUND.
++        ARGUMENTS
++        handle           CBF handle. element_number   The number of the 
++        detector element counting from 0 by order of appearance in the  
++        "diffrn_data_frame " category. axis_number      The number of the 
++        axis, starting from 1 for the fastest for cbf_get_pixel_size and 
++        cbf_get_pixel_size_fs and the slowest for cbf_get_pixel_size_sf. 
++        psize            Pointer to the destination pixel size.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_get_pixel_size_sf(self, *args)
++
++    def force_new_category(self, *args):
++        """
++        Returns : string
++        *args   : 
++
++        C prototype: int cbf_force_new_category (cbf_handle handle,
++                         const char *categoryname);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_force_new_category creates a new category in the current data 
++        block with name categoryname and makes it the current category. 
++        Duplicate category names are allowed.
++        Even if a category with this name already exists, a new category of 
++        the same name is created and becomes the current category. The allows 
++        for the creation of unlooped tag/value lists drawn from the same 
++        category.
++        ARGUMENTS
++        handle         CBF handle. categoryname   The name of the new 
++        category.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_force_new_category(self, *args)
++
++    def force_new_saveframe(self, *args):
++        """
++        Returns : string
++        *args   : 
++
++        C prototype: int cbf_force_new_saveframe (cbf_handle handle,
++                         const char    *saveframename);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_force_new_datablock creates a new data block with name 
++        datablockname and makes it the current data block. Duplicate data 
++        block names are allowed. cbf_force_new_saveframe creates a new savew 
++        frame with name saveframename and makes it the current save frame. 
++        Duplicate save frame names are allowed.
++        Even if a save frame with this name already exists, a new save frame 
++        is created and becomes the current save frame.
++        ARGUMENTS
++        handle          CBF handle. datablockname   The name of the new data 
++        block. saveframename   The name of the new save frame.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_force_new_saveframe(self, *args)
++
++    def count_datablocks(self, *args):
++        """
++        Returns : Integer
++        *args   : 
++
++        C prototype: int cbf_count_datablocks (cbf_handle handle,
++                         unsigned int *datablocks);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_count_datablocks puts the number of data blocks in *datablocks .
++        ARGUMENTS
++        handle       CBF handle. datablocks   Pointer to the destination data 
++        block count.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_count_datablocks(self, *args)
++
++    def find_row(self, *args):
++        """
++        Returns : string
++        *args   : 
++
++        C prototype: int cbf_find_row (cbf_handle handle, const char *value);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_find_row makes the first row in the current column with value 
++        value the current row.
++        The comparison is case-sensitive.
++        If a matching row does not exist, the function returns CBF_NOTFOUND.
++        The current column is not affected.
++        ARGUMENTS
++        handle   CBF handle. value    The value of the row to find.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_find_row(self, *args)
++
++    def select_column(self, *args):
++        """
++        Returns : 
++        *args   : Integer
++
++        C prototype: int cbf_select_column (cbf_handle handle, unsigned int column);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_select_column selects column number column in the current 
++        category as the current column.
++        The first column is number 0.
++        The current row is not affected
++        If the column does not exist, the function returns CBF_NOTFOUND.
++        ARGUMENTS
++        handle   CBF handle. column   Number of the column to select.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_select_column(self, *args)
++
++    def construct_detector(self, *args):
++        """
++        Returns : pycbf detector object
++        *args   : Integer element_number
++
++        C prototype: int cbf_construct_detector (cbf_handle handle,
++                         cbf_detector *detector,      unsigned int element_number);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_construct_detector constructs a detector object for detector 
++        element number element_number using the description in the CBF object 
++        handle and initialises the detector handle *detector.
++        cbf_construct_reference_detector constructs a detector object for 
++        detector element number element_number using the description in the 
++        CBF object handle and initialises the detector handle *detector using 
++        the reference settings of the axes. cbf_require_reference_detector is 
++        similar, but try to force the creations of missing intermediate 
++        categories needed to construct a detector object.
++        ARGUMENTS
++        handle           CBF handle. detector         Pointer to the 
++        destination detector handle. element_number   The number of the 
++        detector element counting from 0 by order of appearance in the  
++        "diffrn_data_frame " category.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_construct_detector(self, *args)
++
++    def rewind_column(self, *args):
++        """
++        Returns : 
++        *args   : 
++
++        C prototype: int cbf_rewind_column (cbf_handle handle);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_rewind_column makes the first column in the current category the 
++        current column.
++        If there are no columns, the function returns CBF_NOTFOUND.
++        The current row is not affected.
++        ARGUMENTS
++        handle   CBF handle.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_rewind_column(self, *args)
++
++    def construct_reference_positioner(self, *args):
++        """
++        Returns : pycbf positioner object
++        *args   : String axis_id
++
++        C prototype: int cbf_construct_reference_positioner (cbf_handle handle,
++                              cbf_positioner *positioner, const char *axis_id);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_construct_positioner constructs a positioner object for the axis 
++        given by axis_id using the description in the CBF object handle and 
++        initialises the positioner handle *positioner.
++        cbf_construct_reference positioner constructs a positioner object for 
++        the axis given by axis_id using the description in the CBF object 
++        handle and initialises the detector handle *detector using the 
++        reference settings of the axes.
++        ARGUMENTS
++        handle     CBF handle. detector   Pointer to the destination detector 
++        handle. axis_id    The identifier of the axis in the  "axis " 
++        category.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_construct_reference_positioner(self, *args)
++
++    def require_column_doublevalue(self, *args):
++        """
++        Returns : Float defaultvalue
++        *args   : String columnname,Float Value
++
++        C prototype: int cbf_require_column_doublevalue (cbf_handle handle,
++                         const char      *columnname, double *number,
++                         const double defaultvalue);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_require_column_doublevalue sets *number to the value of the ASCII 
++        item at the current row for the column given with the name given by 
++        *columnname, with the value interpreted as a decimal floating-point 
++        number, or to the number given by defaultvalue if the item cannot be 
++        found.
++        ARGUMENTS
++        handle         CBF handle. columnname     Name of the column 
++        containing the number. number         pointer to the location to 
++        receive the floating-point value. defaultvalue   Value to use if the 
++        requested column and value cannot be found.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_require_column_doublevalue(self, *args)
++
++    def get_datestamp(self):
++        """
++        Returns : int year,int month,int day,int hour,int minute,double second,
++                  int timezone
++        *args   : 
++
++        C prototype: int cbf_get_datestamp (cbf_handle handle, unsigned int reserved,
++                         int      *year, int *month, int *day, int *hour, int *minute,
++                         double *second, int      *timezone);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_datestamp sets *year, *month, *day, *hour, *minute and 
++        *second to the corresponding values of the collection timestamp. 
++        *timezone is set to timezone difference from UTC in minutes. The 
++        parameter < i>reserved is presently unused and should be set to 0.
++        Any of the destination pointers may be NULL.
++        ARGUMENTS
++        handle     CBF handle. reserved   Unused. Any value other than 0 is 
++        invalid. year       Pointer to the destination timestamp year. month  
++            Pointer to the destination timestamp month (1-12). day        
++        Pointer to the destination timestamp day (1-31). hour       Pointer 
++        to the destination timestamp hour (0-23). minute     Pointer to the 
++        destination timestamp minute (0-59). second     Pointer to the 
++        destination timestamp second (0-60.0). timezone   Pointer to the 
++        destination timezone difference from UTC in minutes.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_get_datestamp(self)
++
++    def get_integervalue(self, *args):
++        """
++        Returns : int
++        *args   : 
++
++        C prototype: int cbf_get_integervalue (cbf_handle handle, int *number);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_integervalue sets *number to the value of the ASCII item at 
++        the current column and row interpreted as a decimal integer. 
++        cbf_require_integervalue sets *number to the value of the ASCII item 
++        at the current column and row interpreted as a decimal integer, 
++        setting it to defaultvalue if necessary.
++        If the value is not ASCII, the function returns CBF_BINARY.
++        ARGUMENTS
++        handle         CBF handle. number         pointer to the number. 
++        defaultvalue   default number value.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_get_integervalue(self, *args)
++
++    def get_crystal_id(self, *args):
++        """
++        Returns : 
++        *args   : string
++
++        C prototype: int cbf_get_crystal_id (cbf_handle handle,
++                         const char **crystal_id);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_crystal_id sets *crystal_id to point to the ASCII value of 
++        the  "diffrn.crystal_id " entry.
++        If the value is not ASCII, the function returns CBF_BINARY.
++        The value will be valid as long as the item exists and has not been 
++        set to a new value.
++        The value must not be modified by the program in any way.
++        ARGUMENTS
++        handle       CBF handle. crystal_id   Pointer to the destination 
++        value pointer.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_get_crystal_id(self, *args)
++
++    def get_doublevalue(self, *args):
++        """
++        Returns : double
++        *args   : 
++
++        C prototype: int cbf_get_doublevalue (cbf_handle handle, double *number);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_doublevalue sets *number to the value of the ASCII item at 
++        the current column and row interpreted as a decimal floating-point 
++        number. cbf_require_doublevalue sets *number to the value of the 
++        ASCII item at the current column and row interpreted as a decimal 
++        floating-point number, setting it to defaultvalue if necessary.
++        If the value is not ASCII, the function returns CBF_BINARY.
++        ARGUMENTS
++        handle         CBF handle. number         Pointer to the destination 
++        number. defaultvalue   default number value.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_get_doublevalue(self, *args)
++
++    def get_unit_cell(self):
++        """
++        Returns : Float a,Float b,Float c,Float alpha,Float beta,Float gamma
++        *args   : 
++
++        C prototype: int cbf_get_unit_cell (cbf_handle handle, double cell[6],
++                         double      cell_esd[6] );
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_unit_cell sets cell[0:2] to the double values of the cell 
++        edge lengths a, b and c in AAngstroms, cell[3:5] to the double values 
++        of the cell angles a, b and g in degrees, cell_esd[0:2] to the double 
++        values of the estimated strandard deviations of the cell edge lengths 
++        a, b and c in AAngstroms, cell_esd[3:5] to the double values of the 
++        estimated standard deviations of the the cell angles a, b and g in 
++        degrees.
++        The values returned are retrieved from the first row of the  "cell 
++        " category. The value of  "_cell.entry_id " is ignored.
++        cell or cell_esd may be NULL.
++        If cell is NULL, the cell parameters are not retrieved.
++        If cell_esd is NULL, the cell parameter esds are not retrieved.
++        If the  "cell " category is present, but some of the values are 
++        missing, zeros are returned for the missing values.
++        ARGUMENTS
++        handle     CBF handle. cell       Pointer to the destination array of 
++        6 doubles for the cell parameters. cell_esd   Pointer to the 
++        destination array of 6 doubles for the cell parameter esds.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success. No errors is 
++        returned for missing values if the  "cell " category exists.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_get_unit_cell(self)
++
++    def get_unit_cell_esd(self):
++        """get_unit_cell_esd(self)"""
++        return _pycbf.cbf_handle_struct_get_unit_cell_esd(self)
++
++    def remove_column(self, *args):
++        """
++        Returns : 
++        *args   : 
++
++        C prototype: int cbf_remove_column (cbf_handle handle);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_remove_column deletes the current column.
++        The current column becomes undefined.
++        ARGUMENTS
++        handle   CBF handle.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_remove_column(self, *args)
++
++    def rewind_blockitem(self, *args):
++        """
++        Returns : CBF_NODETYPE
++        *args   : 
++
++        C prototype: int cbf_rewind_blockitem (cbf_handle handle,
++                         CBF_NODETYPE * type);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_rewind_category makes the first category in the current data 
++        block the current category. cbf_rewind_saveframe makes the first 
++        saveframe in the current data block the current saveframe. 
++        cbf_rewind_blockitem makes the first blockitem (category or 
++        saveframe) in the current data block the current blockitem. The type 
++        of the blockitem (CBF_CATEGORY or CBF_SAVEFRAME) is returned in type.
++        If there are no categories, saveframes or blockitems the function 
++        returns CBF_NOTFOUND.
++        The current column and row become undefined.
++        ARGUMENTS
++        handle   CBF handle. type     CBF handle.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_rewind_blockitem(self, *args)
++
++    def get_value(self, *args):
++        """
++        Returns : 
++        *args   : string
++
++        C prototype: int cbf_get_value (cbf_handle handle, const char **value);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_value sets *value to point to the ASCII value of the item at 
++        the current column and row. cbf_require_value sets *value to point to 
++        the ASCII value of the item at the current column and row, creating 
++        the data item if necessary and initializing it to a copy of 
++        defaultvalue.
++        If the value is not ASCII, the function returns CBF_BINARY.
++        The value will be valid as long as the item exists and has not been 
++        set to a new value.
++        The value must not be modified by the program in any way.
++        ARGUMENTS
++        handle         CBF handle. value          Pointer to the destination 
++        value pointer. defaultvalue   Default value character string.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_get_value(self, *args)
++
++    def count_categories(self, *args):
++        """
++        Returns : Integer
++        *args   : 
++
++        C prototype: int cbf_count_categories (cbf_handle handle,
++                         unsigned int *categories);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_count_categories puts the number of categories in the current 
++        data block in *categories.
++        ARGUMENTS
++        handle       CBF handle. categories   Pointer to the destination 
++        category count.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_count_categories(self, *args)
++
++    def read_widefile(self, *args):
++        """
++        Returns : 
++        *args   : String filename,Integer headers
++
++        C prototype: int cbf_read_widefile (cbf_handle handle, FILE *file, int flags);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_read_file reads the CBF or CIF file file into the CBF object 
++        specified by handle, using the CIF 1.0 convention of 80 character 
++        lines. cbf_read_widefile reads the CBF or CIF file file into the CBF 
++        object specified by handle, using the CIF 1.1 convention of 2048 
++        character lines. A warning is issued to stderr for ascii lines over 
++        the limit. No test is performed on binary sections.
++        Validation is performed in three ways levels: during the lexical 
++        scan, during the parse, and, if a dictionary was converted, against 
++        the value types, value enumerations, categories and parent-child 
++        relationships specified in the dictionary.
++        flags controls the interpretation of binary section headers, the 
++        parsing of brackets constructs and the parsing of treble-quoted 
++        strings.
++        MSG_DIGEST:               Instructs CBFlib to check that the digest 
++        of the binary section matches any header digest value. If the digests 
++        do not match, the call will return CBF_FORMAT. This evaluation and 
++        comparison is delayed (a  "lazy " evaluation) to ensure maximal 
++        processing efficiency. If an immediately evaluation is required, see 
++        MSG_DIGESTNOW, below. MSG_DIGESTNOW:            Instructs CBFlib to 
++        check that the digest of the binary section matches any header 
++        digeste value. If the digests do not match, the call will return 
++        CBF_FORMAT. This evaluation and comparison is performed during 
++        initial parsing of the section to ensure timely error reporting at 
++        the expense of processing efficiency. If a more efficient delayed ( 
++        "lazy ") evaluation is required, see MSG_DIGEST, above. 
++        MSG_DIGESTWARN:           Instructs CBFlib to check that the digest 
++        of the binary section matches any header digeste value. If the 
++        digests do not match, a warning message will be sent to stderr, but 
++        processing will attempt to continue. This evaluation and comparison 
++        is first performed during initial parsing of the section to ensure 
++        timely error reporting at the expense of processing efficiency. An 
++        mismatch of the message digest usually indicates a serious error, but 
++        it is sometimes worth continuing processing to try to isolate the 
++        cause of the error. Use this option with caution. MSG_NODIGEST:       
++              Do not check the digest (default). PARSE_BRACKETS:           
++        Accept DDLm bracket-delimited [item,item,...item] or 
++        {item,item,...item} or (item,item,...item) constructs as valid, 
++        stripping non-quoted embedded whitespace and comments. These 
++        constructs may span multiple lines. PARSE_LIBERAL_BRACKETS:   Accept 
++        DDLm bracket-delimited [item,item,...item] or {item,item,...item} or 
++        (item,item,...item) constructs as valid, stripping embedded 
++        non-quoted, non-separating whitespace and comments. These constructs 
++        may span multiple lines. In this case, whitespace may be used as an 
++        alternative to the comma. PARSE_TRIPLE_QUOTES:      Accept DDLm 
++        triple-quoted  " " "item,item,...item " " " or 
++        '''item,item,...item''' constructs as valid, stripping embedded 
++        whitespace and comments. These constructs may span multiple lines. If 
++        this flag is set, then ''' will not be interpreted as a quoted 
++        apoptrophe and  " " " will not be interpreted as a quoted double 
++        quote mark and PARSE_NOBRACKETS:         Do not accept DDLm 
++        bracket-delimited [item,item,...item] or {item,item,...item} or 
++        (item,item,...item) constructs as valid, stripping non-quoted 
++        embedded whitespace and comments. These constructs may span multiple 
++        lines. PARSE_NOTRIPLE_QUOTES:    No not accept DDLm triple-quoted  " 
++        " "item,item,...item " " " or '''item,item,...item''' constructs 
++        as valid, stripping embedded whitespace and comments. These 
++        constructs may span multiple lines. If this flag is set, then ''' 
++        will be interpreted as a quoted apostrophe and  " " " will be 
++        interpreted as a quoted double quote mark.
++        CBFlib defers reading binary sections as long as possible. In the 
++        current version of CBFlib, this means that:
++        1. The file must be a random-access file opened in binary mode (fopen 
++        ( ,
++
++        """
++        return _pycbf.cbf_handle_struct_read_widefile(self, *args)
++
++    def set_wavelength(self, *args):
++        """
++        Returns : double wavelength
++        *args   : 
++
++        C prototype: int cbf_set_wavelength (cbf_handle handle, double wavelength);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_wavelength sets the current wavelength in AA to wavelength.
++        ARGUMENTS
++        handle       CBF handle. wavelength   Wavelength in AA.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_wavelength(self, *args)
++
++    def set_pixel_size_sf(self, *args):
++        """
++        Returns : 
++        *args   : Int element_number,Int axis_number,Float pixel size
++
++        C prototype: int cbf_set_pixel_size_sf(cbf_handle handle,
++                         unsigned int      element_number, int axis_number,
++                         double psize);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_pixel_size and cbf_set_pixel_size_sf set the item in the 
++        "e;size"e; column of the  "array_structure_list " category 
++        at the row which matches axis axis_number of the detector element 
++        element_number converting the double pixel size psize from meters to 
++        millimeters in storing it in the  "size " column for the axis 
++        axis_number of the detector element element_number. The axis_number 
++        is numbered from 1, starting with the slowest axis. 
++        cbf_set_pixel_size_fs sets the item
++
++        """
++        return _pycbf.cbf_handle_struct_set_pixel_size_sf(self, *args)
++
++    def get_diffrn_id(self, *args):
++        """
++        Returns : 
++        *args   : string
++
++        C prototype: int cbf_get_diffrn_id (cbf_handle handle,
++                         const char **diffrn_id);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_diffrn_id sets *diffrn_id to point to the ASCII value of the  
++        "diffrn.id " entry. cbf_require_diffrn_id also sets *diffrn_id to 
++        point to the ASCII value of the  "diffrn.id " entry, but, if the  
++        "diffrn.id " entry does not exist, it sets the value in the CBF and 
++        in*diffrn_id to the character string given by default_id, creating 
++        the category and column is necessary.
++        The diffrn_id will be valid as long as the item exists and has not 
++        been set to a new value.
++        The diffrn_id must not be modified by the program in any way.
++        ARGUMENTS
++        handle       CBF handle. diffrn_id    Pointer to the destination 
++        value pointer. default_id   Character string default value.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_get_diffrn_id(self, *args)
++
++    def find_datablock(self, *args):
++        """
++        Returns : string
++        *args   : 
++
++        C prototype: int cbf_find_datablock (cbf_handle handle,
++                         const char *datablockname);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_find_datablock makes the data block with name datablockname the 
++        current data block.
++        The comparison is case-insensitive.
++        If the data block does not exist, the function returns CBF_NOTFOUND.
++        The current category becomes undefined.
++        ARGUMENTS
++        handle          CBF handle. datablockname   The name of the data 
++        block to find.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_find_datablock(self, *args)
++
++    def get_polarization(self):
++        """
++        Returns : float polarizn_source_ratio,float polarizn_source_norm
++        *args   : 
++
++        C prototype: int cbf_get_polarization (cbf_handle handle,
++                         double      *polarizn_source_ratio,
++                         double *polarizn_source_norm);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_polarization sets *polarizn_source_ratio and 
++        *polarizn_source_norm to the corresponding source polarization 
++        parameters.
++        Either destination pointer may be NULL.
++        ARGUMENTS
++        handle                  CBF handle. polarizn_source_ratio   Pointer 
++        to the destination polarizn_source_ratio. polarizn_source_norm    
++        Pointer to the destination polarizn_source_norm.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_get_polarization(self)
++
++    def select_category(self, *args):
++        """
++        Returns : 
++        *args   : Integer
++
++        C prototype: int cbf_select_category (cbf_handle handle,
++                         unsigned int category);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_select_category selects category number category in the current 
++        data block as the current category.
++        The first category is number 0.
++        The current column and row become undefined.
++        If the category does not exist, the function returns CBF_NOTFOUND.
++        ARGUMENTS
++        handle     CBF handle. category   Number of the category to select.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_select_category(self, *args)
++
++    def get_pixel_size_fs(self, *args):
++        """
++        Returns : Float pixel_size
++        *args   : Int element_number,Int axis_number
++
++        C prototype: int cbf_get_pixel_size_fs(cbf_handle handle,
++                         unsigned int      element_number, int axis_number,
++                         double *psize);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_pixel_size and cbf_get_pixel_size_sf set *psize to point to 
++        the double value in millimeters of the axis axis_number of the 
++        detector element element_number. The axis_number is numbered from 1, 
++        starting with the slowest axis. cbf_get_pixel_size_fs sets *psize to 
++        point to the double value in millimeters of the axis axis_number of 
++        the detector element element_number. The axis_number is numbered from 
++        1, starting with the fastest axis.
++        If a negative axis number is given, the order of axes is reversed, so 
++        that -1 specifies the slowest axis for cbf_get_pixel_size_fs and the 
++        fastest axis for cbf_get_pixel_size_sf.
++        If the pixel size is not given explcitly in the  "array_element_size 
++        " category, the function returns CBF_NOTFOUND.
++        ARGUMENTS
++        handle           CBF handle. element_number   The number of the 
++        detector element counting from 0 by order of appearance in the  
++        "diffrn_data_frame " category. axis_number      The number of the 
++        axis, starting from 1 for the fastest for cbf_get_pixel_size and 
++        cbf_get_pixel_size_fs and the slowest for cbf_get_pixel_size_sf. 
++        psize            Pointer to the destination pixel size.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_get_pixel_size_fs(self, *args)
++
++    def read_file(self, *args):
++        """
++        Returns : 
++        *args   : String filename,Integer headers
++
++        C prototype: int cbf_read_file (cbf_handle handle, FILE *file, int flags);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_read_file reads the CBF or CIF file file into the CBF object 
++        specified by handle, using the CIF 1.0 convention of 80 character 
++        lines. cbf_read_widefile reads the CBF or CIF file file into the CBF 
++        object specified by handle, using the CIF 1.1 convention of 2048 
++        character lines. A warning is issued to stderr for ascii lines over 
++        the limit. No test is performed on binary sections.
++        Validation is performed in three ways levels: during the lexical 
++        scan, during the parse, and, if a dictionary was converted, against 
++        the value types, value enumerations, categories and parent-child 
++        relationships specified in the dictionary.
++        flags controls the interpretation of binary section headers, the 
++        parsing of brackets constructs and the parsing of treble-quoted 
++        strings.
++        MSG_DIGEST:               Instructs CBFlib to check that the digest 
++        of the binary section matches any header digest value. If the digests 
++        do not match, the call will return CBF_FORMAT. This evaluation and 
++        comparison is delayed (a  "lazy " evaluation) to ensure maximal 
++        processing efficiency. If an immediately evaluation is required, see 
++        MSG_DIGESTNOW, below. MSG_DIGESTNOW:            Instructs CBFlib to 
++        check that the digest of the binary section matches any header 
++        digeste value. If the digests do not match, the call will return 
++        CBF_FORMAT. This evaluation and comparison is performed during 
++        initial parsing of the section to ensure timely error reporting at 
++        the expense of processing efficiency. If a more efficient delayed ( 
++        "lazy ") evaluation is required, see MSG_DIGEST, above. 
++        MSG_DIGESTWARN:           Instructs CBFlib to check that the digest 
++        of the binary section matches any header digeste value. If the 
++        digests do not match, a warning message will be sent to stderr, but 
++        processing will attempt to continue. This evaluation and comparison 
++        is first performed during initial parsing of the section to ensure 
++        timely error reporting at the expense of processing efficiency. An 
++        mismatch of the message digest usually indicates a serious error, but 
++        it is sometimes worth continuing processing to try to isolate the 
++        cause of the error. Use this option with caution. MSG_NODIGEST:       
++              Do not check the digest (default). PARSE_BRACKETS:           
++        Accept DDLm bracket-delimited [item,item,...item] or 
++        {item,item,...item} or (item,item,...item) constructs as valid, 
++        stripping non-quoted embedded whitespace and comments. These 
++        constructs may span multiple lines. PARSE_LIBERAL_BRACKETS:   Accept 
++        DDLm bracket-delimited [item,item,...item] or {item,item,...item} or 
++        (item,item,...item) constructs as valid, stripping embedded 
++        non-quoted, non-separating whitespace and comments. These constructs 
++        may span multiple lines. In this case, whitespace may be used as an 
++        alternative to the comma. PARSE_TRIPLE_QUOTES:      Accept DDLm 
++        triple-quoted  " " "item,item,...item " " " or 
++        '''item,item,...item''' constructs as valid, stripping embedded 
++        whitespace and comments. These constructs may span multiple lines. If 
++        this flag is set, then ''' will not be interpreted as a quoted 
++        apoptrophe and  " " " will not be interpreted as a quoted double 
++        quote mark and PARSE_NOBRACKETS:         Do not accept DDLm 
++        bracket-delimited [item,item,...item] or {item,item,...item} or 
++        (item,item,...item) constructs as valid, stripping non-quoted 
++        embedded whitespace and comments. These constructs may span multiple 
++        lines. PARSE_NOTRIPLE_QUOTES:    No not accept DDLm triple-quoted  " 
++        " "item,item,...item " " " or '''item,item,...item''' constructs 
++        as valid, stripping embedded whitespace and comments. These 
++        constructs may span multiple lines. If this flag is set, then ''' 
++        will be interpreted as a quoted apostrophe and  " " " will be 
++        interpreted as a quoted double quote mark.
++        CBFlib defers reading binary sections as long as possible. In the 
++        current version of CBFlib, this means that:
++        1. The file must be a random-access file opened in binary mode (fopen 
++        ( ,
++
++        """
++        return _pycbf.cbf_handle_struct_read_file(self, *args)
++
++    def datablock_name(self, *args):
++        """
++        Returns : 
++        *args   : string
++
++        C prototype: int cbf_datablock_name (cbf_handle handle,
++                         const char **datablockname);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_datablock_name sets *datablockname to point to the name of the 
++        current data block.
++        The data block name will be valid as long as the data block exists 
++        and has not been renamed.
++        The name must not be modified by the program in any way.
++        ARGUMENTS
++        handle          CBF handle. datablockname   Pointer to the 
++        destination data block name pointer.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_datablock_name(self, *args)
++
++    def set_realarray_wdims(self, *args):
++        """
++        Returns : 
++        *args   : int compression,int binary_id,(binary) String data,int elsize,
++                  int elements,String byteorder,int dimfast,int dimmid,int dimslow,
++                  int padding
++
++        C prototype: int cbf_set_realarray_wdims (cbf_handle handle,
++                         unsigned int compression,    int binary_id, void *array,
++                         size_t elsize, size_t elements, const char    *byteorder,
++                         size_t dimfast, size_t dimmid, size_t dimslow,
++                         size_t    padding);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_integerarray sets the binary value of the item at the current 
++        column and row to an integer array. The array consists of elements 
++        elements of elsize bytes each, starting at array. The elements are 
++        signed if elsigned is non-0 and unsigned otherwise. binary_id is the 
++        binary section identifier. cbf_set_realarray sets the binary value of 
++        the item at the current column and row to an integer array. The array 
++        consists of elements elements of elsize bytes each, starting at 
++        array. binary_id is the binary section identifier.
++        The cbf_set_integerarray_wdims, cbf_set_integerarray_wdims_fs, 
++        cbf_set_integerarray_wdims_sf, cbf_set_realarray_wdims, 
++        cbf_set_realarray_wdims_fs and cbf_set_realarray_wdims_sf variants 
++        allow the data header values of byteorder, dimfast, dimmid, dimslow 
++        and padding to be set to the data byte order, the fastest, second 
++        fastest and third fastest array dimensions and the size in byte of 
++        the post data padding to be used.
++        The array will be compressed using the compression scheme specifed by 
++        compression. Currently, the available schemes are:
++        CBF_CANONICAL     Canonical-code compression (section 3.3.1) 
++        CBF_PACKED        CCP4-style packing (section 3.3.2) CBF_PACKED_V2    
++         CCP4-style packing, version 2 (section 3.3.2) CBF_BYTE_OFFSET   
++        Simple  "byte_offset " compression. CBF_NONE          No 
++        compression. NOTE: This scheme is by far the slowest of the four and 
++        uses much more disk space. It is intended for routine use with small 
++        arrays only. With large arrays (like images) it should be used only 
++        for debugging.
++        The values compressed are limited to 64 bits. If any element in the 
++        array is larger than 64 bits, the value compressed is the nearest 
++        64-bit value.
++        Currently, the source array must consist of chars, shorts or ints 
++        (signed or unsigned), for cbf_set_integerarray, or IEEE doubles or 
++        floats for cbf_set_realarray. If elsize is not equal to sizeof 
++        (char), sizeof (short) or sizeof (int), the function returns 
++        CBF_ARGUMENT.
++        ARGUMENTS
++        handle        CBF handle. compression   Compression method to use. 
++        binary_id     Integer binary identifier. array         Pointer to the 
++        source array. elsize        Size in bytes of each source array 
++        element. elsigned      Set to non-0 if the source array elements are 
++        signed. elements: The number of elements in the array.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_set_realarray_wdims(self, *args)
++
++    def construct_reference_detector(self, *args):
++        """
++        Returns : pycbf detector object
++        *args   : Integer element_number
++
++        C prototype: int cbf_construct_reference_detector (cbf_handle handle,
++                         cbf_detector      *detector, unsigned int element_number);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_construct_detector constructs a detector object for detector 
++        element number element_number using the description in the CBF object 
++        handle and initialises the detector handle *detector.
++        cbf_construct_reference_detector constructs a detector object for 
++        detector element number element_number using the description in the 
++        CBF object handle and initialises the detector handle *detector using 
++        the reference settings of the axes. cbf_require_reference_detector is 
++        similar, but try to force the creations of missing intermediate 
++        categories needed to construct a detector object.
++        ARGUMENTS
++        handle           CBF handle. detector         Pointer to the 
++        destination detector handle. element_number   The number of the 
++        detector element counting from 0 by order of appearance in the  
++        "diffrn_data_frame " category.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_construct_reference_detector(self, *args)
++
++    def get_real_3d_image_fs_as_string(self, *args):
++        """
++        Returns : (Binary)String
++        *args   : int element_number,int elsize,int ndimfast,int ndimmid,int ndimslow
++
++        C prototype: int cbf_get_real_3d_image_fs (cbf_handle handle,
++                         unsigned int reserved,      unsigned int element_number,
++                         void *array, size_t elsize, size_t      ndimfast,
++                         size_t ndimmid, size_t ndimslow);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_image, cbf_get_image_fs and cbf_get_image_sf read the image 
++        array for element number element_number into an array. The array 
++        consists of ndimslow *ndimfast elements of elsize bytes each, 
++        starting at array. The elements are signed if elsign is non-0 and 
++        unsigned otherwise. cbf_get_real_image, cbf_get_real_image_fs and 
++        cbf_get_real_image_sf read the image array of IEEE doubles or floats 
++        for element number element_number into an array. A real array is 
++        always signed. cbf_get_3d_image, cbf_get_3d_image_fs and 
++        cbf_get_3d_image_sf read the 3D image array for element number 
++        element_number into an array. The array consists of ndimslow *ndimmid 
++        *ndimfast elements of elsize bytes each, starting at array. The 
++        elements are signed if elsign is non-0 and unsigned otherwise. 
++        cbf_get_real_3d_image, cbf_get_real_3d_image_fs, 
++        cbf_get_real_3d_image_sf reads the 3D image array of IEEE doubles or 
++        floats for element number element_number into an array. A real array 
++        is always signed.
++        The _fs calls give the dimensions in a fast-to-slow order. The calls 
++        with no suffix and the calls _sf calls give the dimensions in 
++        slow-to-fast order
++        The structure of the array as a 1-, 2- or 3-dimensional array should 
++        agree with the structure of the array given in the 
++        ARRAY_STRUCTURE_LIST category. If the array is 1-dimensional, 
++        ndimslow should be the array size and ndimfast and, for the 3D calls, 
++        ndimmid, should be set to 1 both in the call and in the imgCIF data 
++        being processed. If the array is 2-dimensional and a 3D call is used, 
++        ndimslow and ndimmid should be the
++
++        """
++        return _pycbf.cbf_handle_struct_get_real_3d_image_fs_as_string(self, *args)
++
++    def rewind_row(self, *args):
++        """
++        Returns : 
++        *args   : 
++
++        C prototype: int cbf_rewind_row (cbf_handle handle);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_rewind_row makes the first row in the current category the 
++        current row.
++        If there are no rows, the function returns CBF_NOTFOUND.
++        The current column is not affected.
++        ARGUMENTS
++        handle   CBF handle.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_rewind_row(self, *args)
++
++    def get_axis_setting(self, *args):
++        """
++        Returns : Float start,Float increment
++        *args   : String axis_id
++
++        C prototype: int cbf_get_axis_setting (cbf_handle handle,
++                         unsigned int reserved,      const char *axis_id, double *start,
++                         double *increment);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_axis_setting sets *start and *increment to the corresponding 
++        values of the axis axis_id.
++        Either of the destination pointers may be NULL.
++        The parameter reserved is presently unused and should be set to 0.
++        ARGUMENTS
++        handle      CBF handle. reserved    Unused. Any value other than 0 is 
++        invalid. axis_id     Axis id. start       Pointer to the destination 
++        start value. increment   Pointer to the destination increment value.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_get_axis_setting(self, *args)
++
++    def require_column(self, *args):
++        """
++        Returns : string
++        *args   : 
++
++        C prototype: int cbf_require_column (cbf_handle handle,
++                         const char *columnname);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_require_column makes the columns in the current category with 
++        name columnname the current column, if it exists, or creates it if it 
++        does not.
++        The comparison is case-insensitive.
++        The current row is not affected.
++        ARGUMENTS
++        handle       CBF handle. columnname   The name of column to find.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_require_column(self, *args)
++
++    def get_timestamp(self):
++        """
++        Returns : Float time,Integer timezone
++        *args   : 
++
++        C prototype: int cbf_get_timestamp (cbf_handle handle, unsigned int reserved,
++                         double      *time, int *timezone);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_timestamp sets *time to the collection timestamp in seconds 
++        since January 1 1970. *timezone is set to timezone difference from 
++        UTC in minutes. The parameter reserved is presently unused and should 
++        be set to 0.
++        Either of the destination pointers may be NULL.
++        ARGUMENTS
++        handle     CBF handle. reserved   Unused. Any value other than 0 is 
++        invalid. time       Pointer to the destination collection timestamp. 
++        timezone   Pointer to the destination timezone difference.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_get_timestamp(self)
++
++    def find_nextrow(self, *args):
++        """
++        Returns : string
++        *args   : 
++
++        C prototype: int cbf_find_nextrow (cbf_handle handle, const char *value);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_find_nextrow makes the makes the next row in the current column 
++        with value value the current row. The search starts from the row 
++        following the last row found with cbf_find_row or cbf_find_nextrow, 
++        or from the current row if the current row was defined using any 
++        other function.
++        The comparison is case-sensitive.
++        If no more matching rows exist, the function returns CBF_NOTFOUND.
++        The current column is not affected.
++        ARGUMENTS
++        handle   CBF handle. value    the value to search for.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_find_nextrow(self, *args)
++
++    def get_realarrayparameters_wdims_sf(self):
++        """
++        Returns : int compression,int binary_id,int elsize,int elements,char **bo,
++                  int *bolen,int dimslow,int dimmid,int dimfast,int padding
++        *args   : 
++
++        C prototype: int cbf_get_realarrayparameters_wdims_sf (cbf_handle handle,
++                         unsigned int    *compression, int *binary_id, size_t *elsize,
++                         size_t *elements, const char    **byteorder, size_t *dimslow,
++                         size_t *dimmid, size_t *dimfast, size_t    *padding);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_integerarrayparameters sets *compression, *binary_id, 
++        *elsize, *elsigned, *elunsigned, *elements, *minelement and 
++        *maxelement to values read from the binary value of the item at the 
++        current column and row. This provides all the arguments needed for a 
++        subsequent call to cbf_set_integerarray, if a copy of the array is to 
++        be made into another CIF or CBF. cbf_get_realarrayparameters sets 
++        *compression, *binary_id, *elsize, *elements to values read from the 
++        binary value of the item at the current column and row. This provides 
++        all the arguments needed for a subsequent call to cbf_set_realarray, 
++        if a copy of the arry is to be made into another CIF or CBF.
++        The variants cbf_get_integerarrayparameters_wdims, 
++        cbf_get_integerarrayparameters_wdims_fs, 
++        cbf_get_integerarrayparameters_wdims_sf, 
++        cbf_get_realarrayparameters_wdims, 
++        cbf_get_realarrayparameters_wdims_fs, 
++        cbf_get_realarrayparameters_wdims_sf set **byteorder, *dimfast, 
++        *dimmid, *dimslow, and *padding as well, providing the additional 
++        parameters needed for a subsequent call to cbf_set_integerarray_wdims 
++        or cbf_set_realarray_wdims.
++        The value returned in *byteorder is a pointer either to the string  
++        "little_endian " or to the string  "big_endian ". This should be 
++        the byte order of the data, not necessarily of the host machine. No 
++        attempt should be made to modify this string. At this time only  
++        "little_endian " will be returned.
++        The values returned in *dimfast, *dimmid and *dimslow are the sizes 
++        of the fastest changing, second fastest changing and third fastest 
++        changing dimensions of the array, if specified, or zero, if not 
++        specified.
++        The value returned in *padding is the size of the post-data padding, 
++        if any and if specified in the data header. The value is given as a 
++        count of octets.
++        If the value is not binary, the function returns CBF_ASCII.
++        ARGUMENTS
++        handle        CBF handle. compression   Compression method used. 
++        elsize        Size in bytes of each array element. binary_id     
++        Pointer to the destination integer binary identifier. elsigned      
++        Pointer to an integer. Set to 1 if the elements can be read as signed 
++        integers. elunsigned    Pointer to an integer. Set to 1 if the 
++        elements can be read as unsigned integers. elements      Pointer to 
++        the destination number of elements. minelement    Pointer to the 
++        destination smallest element. maxelement    Pointer to the 
++        destination largest element. byteorder     Pointer to the destination 
++        byte order. dimfast       Pointer to the destination fastest 
++        dimension. dimmid        Pointer to the destination second fastest 
++        dimension. dimslow       Pointer to the destination third fastest 
++        dimension. padding       Pointer to the destination padding size.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_get_realarrayparameters_wdims_sf(self)
++
++    def reset_datablock(self, *args):
++        """
++        Returns : 
++        *args   : 
++
++        C prototype: int cbf_reset_datablock (cbf_handle handle);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_reset_datablock deletes all categories from the current data 
++        block. cbf_reset_saveframe deletes all categories from the current 
++        save frame.
++        ARGUMENTS
++        handle   CBF handle.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_reset_datablock(self, *args)
++
++    def set_3d_image_fs(self, *args):
++        """
++        Returns : 
++        *args   : int element_number,int compression,(binary) String data,int elsize,
++                  int elsign,int dimfast,int dimmid,int dimslow
++
++        C prototype: int cbf_set_3d_image_fs(cbf_handle handle, unsigned int reserved,
++                              unsigned int element_number, unsigned int compression,
++                         void *array,      size_t elsize, int elsign, size_t ndimfast,
++                         size_t ndimmid, size_t      ndimslow);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_image, cbf_set_image_fs and cbf_set_image_sf write the image 
++        array for element number element_number. The array consists of 
++        ndimfast *ndimslow elements of elsize bytes each, starting at array. 
++        The elements are signed if elsign is non-zero and unsigned otherwise. 
++        cbf_set_real_image, cbf_set_real_image_fs and cbf_set_real_image_sf 
++        write the image array for element number element_number. The array 
++        consists of ndimfast *ndimslow IEEE double or float elements of 
++        elsize bytes each, starting at array. cbf_set_3d_image, 
++        cbf_set_3d_image_fs and cbf_set_3d_image_sf write the 3D image array 
++        for element number element_number. The array consists of ndimfast 
++        *ndimmid *ndimslow elements of elsize bytes each, starting at array. 
++        The elements are signed if elsign is non-0 and unsigned otherwise. 
++        cbf_set_real_3d_image, cbf_set_real_3d_image_fs and 
++        cbf_set_real_3d_image_sf writes the 3D image array for element number 
++        element_number. The array consists of ndimfast *ndimmid *ndimslow 
++        IEEE double or float elements of elsize bytes each, starting at 
++        array.
++        The _fs calls give the dimensions in a fast-to-slow order. The calls 
++        with no suffix and the calls _sf calls give the dimensions in 
++        slow-to-fast order
++        If the array is 1-dimensional, ndimslow should be the array size and 
++        ndimfast and, for the 3D calls, ndimmid, should be set to 1. If the 
++        array is 2-dimensional and the 3D calls are used, ndimslow and 
++        ndimmid should be used for the array dimensions and ndimfast should 
++        be set to 1.
++        The array will be compressed using the compression scheme specifed by 
++        compression. Currently, the available schemes are:
++        CBF_CANONICAL   Canonical-code compression (section 3.3.1) CBF_PACKED 
++             CCP4-style packing (section 3.3.2) CBF_PACKED_V2     CCP4-style 
++        packing, version 2 (section 3.3.2) CBF_BYTE_OFFSET   Simple  
++        "byte_offset " compression. CBF_NONE        No compression.
++        The values compressed are limited to 64 bits. If any element in the 
++        array is larger than 64 bits, the value compressed is the nearest 
++        64-bit value.
++        Currently, the source array must consist of chars, shorts or ints 
++        (signed or unsigned)for cbf_set_image, or IEEE doubles or floats for 
++        cbf_set_real_image. If elsize is not equal to sizeof (short), sizeof 
++        (int), sizeof(double) or sizeof(float), the function returns 
++        CBF_ARGUMENT.
++        The parameter reserved is presently unused and should be set to 0.
++        ARGUMENTS
++        handle           CBF handle. reserved         Unused. Any value other 
++        than 0 is invalid. element_number   The number of the detector 
++        element counting from 0 by order of appearance in the  
++        "diffrn_data_frame " category. compression      Compression type. 
++        array            Pointer to the image array. elsize           Size in 
++        bytes of each image array element. elsigned         Set to non-0 if 
++        the image array elements are signed. ndimslow         Slowest array 
++        dimension. ndimmid          Second slowest array dimension. ndimfast  
++               Fastest array dimension.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_3d_image_fs(self, *args)
++
++    def set_saveframename(self, *args):
++        """
++        Returns : string
++        *args   : 
++
++        C prototype: int cbf_set_saveframename (cbf_handle handle,
++                         const char *saveframename);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_datablockname changes the name of the current data block to 
++        datablockname. cbf_set_saveframename changes the name of the current 
++        save frame to saveframename.
++        If a data block or save frame with this name already exists 
++        (comparison is case-insensitive), the function returns CBF_IDENTICAL.
++        ARGUMENTS
++        handle          CBF handle. datablockname   The new data block name. 
++        datablockname   The new save frame name.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_set_saveframename(self, *args)
++
++    def require_integervalue(self, *args):
++        """
++        Returns : Int number
++        *args   : Int thedefault
++
++        C prototype: int cbf_require_integervalue (cbf_handle handle, int *number,
++                         int    defaultvalue);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_integervalue sets *number to the value of the ASCII item at 
++        the current column and row interpreted as a decimal integer. 
++        cbf_require_integervalue sets *number to the value of the ASCII item 
++        at the current column and row interpreted as a decimal integer, 
++        setting it to defaultvalue if necessary.
++        If the value is not ASCII, the function returns CBF_BINARY.
++        ARGUMENTS
++        handle         CBF handle. number         pointer to the number. 
++        defaultvalue   default number value.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_require_integervalue(self, *args)
++
++    def get_integerarrayparameters(self):
++        """
++        Returns : int compression,int binary_id,int elsize,int elsigned,int elunsigned,
++                  int elements,int minelement,int maxelement
++        *args   : 
++
++        C prototype: int cbf_get_integerarrayparameters (cbf_handle handle,
++                         unsigned int    *compression, int *binary_id, size_t *elsize,
++                         int *elsigned, int    *elunsigned, size_t *elements,
++                         int *minelement, int *maxelement);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_integerarrayparameters sets *compression, *binary_id, 
++        *elsize, *elsigned, *elunsigned, *elements, *minelement and 
++        *maxelement to values read from the binary value of the item at the 
++        current column and row. This provides all the arguments needed for a 
++        subsequent call to cbf_set_integerarray, if a copy of the array is to 
++        be made into another CIF or CBF. cbf_get_realarrayparameters sets 
++        *compression, *binary_id, *elsize, *elements to values read from the 
++        binary value of the item at the current column and row. This provides 
++        all the arguments needed for a subsequent call to cbf_set_realarray, 
++        if a copy of the arry is to be made into another CIF or CBF.
++        The variants cbf_get_integerarrayparameters_wdims, 
++        cbf_get_integerarrayparameters_wdims_fs, 
++        cbf_get_integerarrayparameters_wdims_sf, 
++        cbf_get_realarrayparameters_wdims, 
++        cbf_get_realarrayparameters_wdims_fs, 
++        cbf_get_realarrayparameters_wdims_sf set **byteorder, *dimfast, 
++        *dimmid, *dimslow, and *padding as well, providing the additional 
++        parameters needed for a subsequent call to cbf_set_integerarray_wdims 
++        or cbf_set_realarray_wdims.
++        The value returned in *byteorder is a pointer either to the string  
++        "little_endian " or to the string  "big_endian ". This should be 
++        the byte order of the data, not necessarily of the host machine. No 
++        attempt should be made to modify this string. At this time only  
++        "little_endian " will be returned.
++        The values returned in *dimfast, *dimmid and *dimslow are the sizes 
++        of the fastest changing, second fastest changing and third fastest 
++        changing dimensions of the array, if specified, or zero, if not 
++        specified.
++        The value returned in *padding is the size of the post-data padding, 
++        if any and if specified in the data header. The value is given as a 
++        count of octets.
++        If the value is not binary, the function returns CBF_ASCII.
++        ARGUMENTS
++        handle        CBF handle. compression   Compression method used. 
++        elsize        Size in bytes of each array element. binary_id     
++        Pointer to the destination integer binary identifier. elsigned      
++        Pointer to an integer. Set to 1 if the elements can be read as signed 
++        integers. elunsigned    Pointer to an integer. Set to 1 if the 
++        elements can be read as unsigned integers. elements      Pointer to 
++        the destination number of elements. minelement    Pointer to the 
++        destination smallest element. maxelement    Pointer to the 
++        destination largest element. byteorder     Pointer to the destination 
++        byte order. dimfast       Pointer to the destination fastest 
++        dimension. dimmid        Pointer to the destination second fastest 
++        dimension. dimslow       Pointer to the destination third fastest 
++        dimension. padding       Pointer to the destination padding size.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_get_integerarrayparameters(self)
++
++    def set_real_3d_image_sf(self, *args):
++        """
++        Returns : 
++        *args   : int element_number,int compression,(binary) String data,int elsize,
++                  int dimslow,int dimmid,int dimfast
++
++        C prototype: int cbf_set_real_3d_image_sf(cbf_handle handle,
++                         unsigned int reserved,      unsigned int element_number,
++                         unsigned int compression, void      *array,size_t elsize,
++                         size_t ndimslow, size_t ndimmid, size_t ndimfast);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_image, cbf_set_image_fs and cbf_set_image_sf write the image 
++        array for element number element_number. The array consists of 
++        ndimfast *ndimslow elements of elsize bytes each, starting at array. 
++        The elements are signed if elsign is non-zero and unsigned otherwise. 
++        cbf_set_real_image, cbf_set_real_image_fs and cbf_set_real_image_sf 
++        write the image array for element number element_number. The array 
++        consists of ndimfast *ndimslow IEEE double or float elements of 
++        elsize bytes each, starting at array. cbf_set_3d_image, 
++        cbf_set_3d_image_fs and cbf_set_3d_image_sf write the 3D image array 
++        for element number element_number. The array consists of ndimfast 
++        *ndimmid *ndimslow elements of elsize bytes each, starting at array. 
++        The elements are signed if elsign is non-0 and unsigned otherwise. 
++        cbf_set_real_3d_image, cbf_set_real_3d_image_fs and 
++        cbf_set_real_3d_image_sf writes the 3D image array for element number 
++        element_number. The array consists of ndimfast *ndimmid *ndimslow 
++        IEEE double or float elements of elsize bytes each, starting at 
++        array.
++        The _fs calls give the dimensions in a fast-to-slow order. The calls 
++        with no suffix and the calls _sf calls give the dimensions in 
++        slow-to-fast order
++        If the array is 1-dimensional, ndimslow should be the array size and 
++        ndimfast and, for the 3D calls, ndimmid, should be set to 1. If the 
++        array is 2-dimensional and the 3D calls are used, ndimslow and 
++        ndimmid should be used for the array dimensions and ndimfast should 
++        be set to 1.
++        The array will be compressed using the compression scheme specifed by 
++        compression. Currently, the available schemes are:
++        CBF_CANONICAL   Canonical-code compression (section 3.3.1) CBF_PACKED 
++             CCP4-style packing (section 3.3.2) CBF_PACKED_V2     CCP4-style 
++        packing, version 2 (section 3.3.2) CBF_BYTE_OFFSET   Simple  
++        "byte_offset " compression. CBF_NONE        No compression.
++        The values compressed are limited to 64 bits. If any element in the 
++        array is larger than 64 bits, the value compressed is the nearest 
++        64-bit value.
++        Currently, the source array must consist of chars, shorts or ints 
++        (signed or unsigned)for cbf_set_image, or IEEE doubles or floats for 
++        cbf_set_real_image. If elsize is not equal to sizeof (short), sizeof 
++        (int), sizeof(double) or sizeof(float), the function returns 
++        CBF_ARGUMENT.
++        The parameter reserved is presently unused and should be set to 0.
++        ARGUMENTS
++        handle           CBF handle. reserved         Unused. Any value other 
++        than 0 is invalid. element_number   The number of the detector 
++        element counting from 0 by order of appearance in the  
++        "diffrn_data_frame " category. compression      Compression type. 
++        array            Pointer to the image array. elsize           Size in 
++        bytes of each image array element. elsigned         Set to non-0 if 
++        the image array elements are signed. ndimslow         Slowest array 
++        dimension. ndimmid          Second slowest array dimension. ndimfast  
++               Fastest array dimension.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_real_3d_image_sf(self, *args)
++
++    def write_file(self, *args):
++        """
++        Returns : 
++        *args   : String filename,Integer ciforcbf,Integer Headers,Integer encoding
++
++        C prototype: int cbf_write_file (cbf_handle handle, FILE *file, int readable,
++                         int    ciforcbf, int flags, int encoding);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_write_file writes the CBF object specified by handle into the 
++        file file, following CIF 1.0 conventions of 80 character lines. 
++        cbf_write_widefile writes the CBF object specified by handle into the 
++        file file, following CIF 1.1 conventions of 2048 character lines. A 
++        warning is issued to stderr for ascii lines over the limit, and an 
++        attempt is made to fold lines to fit. No test is performed on binary 
++        sections.
++        If a dictionary has been provided, aliases will be applied on output.
++        Unlike cbf_read_file, the file does not have to be random-access.
++        If the file is random-access and readable, readable can be set to 
++        non-0 to indicate to CBFlib that the file can be used as a buffer to 
++        conserve disk space. If the file is not random-access or not 
++        readable, readable must be 0.
++
++        """
++        return _pycbf.cbf_handle_struct_write_file(self, *args)
++
++    def set_divergence(self, *args):
++        """
++        Returns : 
++        *args   : Float div_x_source,Float div_y_source,Float div_x_y_source
++
++        C prototype: int cbf_set_divergence (cbf_handle handle, double div_x_source,
++                         double      div_y_source, double div_x_y_source);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_divergence sets the source divergence parameters to the 
++        values specified by div_x_source, div_y_source and div_x_y_source.
++        ARGUMENTS
++        handle           CBF handle. div_x_source     New value of 
++        div_x_source. div_y_source     New value of div_y_source. 
++        div_x_y_source   New value of div_x_y_source.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_divergence(self, *args)
++
++    def remove_datablock(self, *args):
++        """
++        Returns : 
++        *args   : 
++
++        C prototype: int cbf_remove_datablock (cbf_handle handle);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_remove_datablock deletes the current data block. 
++        cbf_remove_saveframe deletes the current save frame.
++        The current data block becomes undefined.
++        ARGUMENTS
++        handle   CBF handle.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_remove_datablock(self, *args)
++
++    def count_elements(self, *args):
++        """
++        Returns : Integer
++        *args   : 
++
++        C prototype: int cbf_count_elements (cbf_handle handle,
++                         unsigned int *elements);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_count_elements sets *elements to the number of detector elements.
++        ARGUMENTS
++        handle     CBF handle. elements   Pointer to the destination count.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_count_elements(self, *args)
++
++    def set_image_fs(self, *args):
++        """
++        Returns : 
++        *args   : int element_number,int compression,(binary) String data,int elsize,
++                  int elsign,int dimfast,int dimslow
++
++        C prototype: int cbf_set_image_fs(cbf_handle handle, unsigned int reserved,
++                         unsigned      int element_number, unsigned int compression,
++                         void *array, size_t      elsize, int elsign, size_t ndimfast,
++                         size_t ndimslow);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_image, cbf_set_image_fs and cbf_set_image_sf write the image 
++        array for element number element_number. The array consists of 
++        ndimfast *ndimslow elements of elsize bytes each, starting at array. 
++        The elements are signed if elsign is non-zero and unsigned otherwise. 
++        cbf_set_real_image, cbf_set_real_image_fs and cbf_set_real_image_sf 
++        write the image array for element number element_number. The array 
++        consists of ndimfast *ndimslow IEEE double or float elements of 
++        elsize bytes each, starting at array. cbf_set_3d_image, 
++        cbf_set_3d_image_fs and cbf_set_3d_image_sf write the 3D image array 
++        for element number element_number. The array consists of ndimfast 
++        *ndimmid *ndimslow elements of elsize bytes each, starting at array. 
++        The elements are signed if elsign is non-0 and unsigned otherwise. 
++        cbf_set_real_3d_image, cbf_set_real_3d_image_fs and 
++        cbf_set_real_3d_image_sf writes the 3D image array for element number 
++        element_number. The array consists of ndimfast *ndimmid *ndimslow 
++        IEEE double or float elements of elsize bytes each, starting at 
++        array.
++        The _fs calls give the dimensions in a fast-to-slow order. The calls 
++        with no suffix and the calls _sf calls give the dimensions in 
++        slow-to-fast order
++        If the array is 1-dimensional, ndimslow should be the array size and 
++        ndimfast and, for the 3D calls, ndimmid, should be set to 1. If the 
++        array is 2-dimensional and the 3D calls are used, ndimslow and 
++        ndimmid should be used for the array dimensions and ndimfast should 
++        be set to 1.
++        The array will be compressed using the compression scheme specifed by 
++        compression. Currently, the available schemes are:
++        CBF_CANONICAL   Canonical-code compression (section 3.3.1) CBF_PACKED 
++             CCP4-style packing (section 3.3.2) CBF_PACKED_V2     CCP4-style 
++        packing, version 2 (section 3.3.2) CBF_BYTE_OFFSET   Simple  
++        "byte_offset " compression. CBF_NONE        No compression.
++        The values compressed are limited to 64 bits. If any element in the 
++        array is larger than 64 bits, the value compressed is the nearest 
++        64-bit value.
++        Currently, the source array must consist of chars, shorts or ints 
++        (signed or unsigned)for cbf_set_image, or IEEE doubles or floats for 
++        cbf_set_real_image. If elsize is not equal to sizeof (short), sizeof 
++        (int), sizeof(double) or sizeof(float), the function returns 
++        CBF_ARGUMENT.
++        The parameter reserved is presently unused and should be set to 0.
++        ARGUMENTS
++        handle           CBF handle. reserved         Unused. Any value other 
++        than 0 is invalid. element_number   The number of the detector 
++        element counting from 0 by order of appearance in the  
++        "diffrn_data_frame " category. compression      Compression type. 
++        array            Pointer to the image array. elsize           Size in 
++        bytes of each image array element. elsigned         Set to non-0 if 
++        the image array elements are signed. ndimslow         Slowest array 
++        dimension. ndimmid          Second slowest array dimension. ndimfast  
++               Fastest array dimension.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_image_fs(self, *args)
++
++    def require_reference_detector(self, *args):
++        """
++        Returns : pycbf detector object
++        *args   : Integer element_number
++
++        C prototype: int cbf_require_reference_detector (cbf_handle handle,
++                         cbf_detector      *detector, unsigned int element_number);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_construct_detector constructs a detector object for detector 
++        element number element_number using the description in the CBF object 
++        handle and initialises the detector handle *detector.
++        cbf_construct_reference_detector constructs a detector object for 
++        detector element number element_number using the description in the 
++        CBF object handle and initialises the detector handle *detector using 
++        the reference settings of the axes. cbf_require_reference_detector is 
++        similar, but try to force the creations of missing intermediate 
++        categories needed to construct a detector object.
++        ARGUMENTS
++        handle           CBF handle. detector         Pointer to the 
++        destination detector handle. element_number   The number of the 
++        detector element counting from 0 by order of appearance in the  
++        "diffrn_data_frame " category.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_require_reference_detector(self, *args)
++
++    def next_category(self, *args):
++        """
++        Returns : 
++        *args   : 
++
++        C prototype: int cbf_next_category (cbf_handle handle);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_next_category makes the category following the current category 
++        in the current data block the current category.
++        If there are no more categories, the function returns CBF_NOTFOUND.
++        The current column and row become undefined.
++        ARGUMENTS
++        handle   CBF handle.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_next_category(self, *args)
++
++    def set_diffrn_id(self, *args):
++        """
++        Returns : string
++        *args   : 
++
++        C prototype: int cbf_set_diffrn_id (cbf_handle handle, const char *diffrn_id);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_diffrn_id sets the  "diffrn.id " entry of the current 
++        datablock to the ASCII value diffrn_id.
++        This function also changes corresponding  "diffrn_id " entries in 
++        the  "diffrn_source ",  "diffrn_radiation ",  "diffrn_detector 
++        " and  "diffrn_measurement " categories.
++        ARGUMENTS
++        handle      CBF handle. diffrn_id   ASCII value.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_diffrn_id(self, *args)
++
++    def set_timestamp(self, *args):
++        """
++        Returns : 
++        *args   : Float time,Integer timezone,Float precision
++
++        C prototype: int cbf_set_timestamp (cbf_handle handle, unsigned int reserved,
++                         double      time, int timezone, double precision);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_timestamp sets the collection timestamp in seconds since 
++        January 1 1970 to the value specified by time. The timezone 
++        difference from UTC
++
++        """
++        return _pycbf.cbf_handle_struct_set_timestamp(self, *args)
++
++    def get_orientation_matrix(self):
++        """
++        Returns : Float matrix_0,Float matrix_1,Float matrix_2,Float matrix_3,
++                  Float matrix_4,Float matrix_5,Float matrix_6,Float matrix_7,
++                  Float matrix_8
++        *args   : 
++
++        C prototype: int cbf_get_orientation_matrix (cbf_handle handle,
++                         double ub_matrix[9]);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_orientation_matrix sets ub_matrix to point to the array of 
++        orientation matrix entries in the  "diffrn " category in the order 
++        of columns:
++         "UB[1][1] "  "UB[1][2] "  "UB[1][3] "  "UB[2][1] "  
++        "UB[2][2] "  "UB[2][3] "  "UB[3][1] "  "UB[3][2] "  
++        "UB[3][3] "
++        cbf_set_orientation_matrix sets the values in the  "diffrn " 
++        category to the values pointed to by ub_matrix.
++        ARGUMENTS
++        handle     CBF handle. ubmatric   Source or destination array of 9 
++        doubles giving the orientation matrix parameters.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_get_orientation_matrix(self)
++
++    def get_image_size_fs(self, *args):
++        """
++        Returns : size_t ndimfast,size_t ndimslow
++        *args   : Integer element_number
++
++        C prototype: int cbf_get_image_size_fs (cbf_handle handle,
++                         unsigned int reserved,      unsigned int element_number,
++                         size_t *ndimfast, size_t *ndimslow);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_image_size, cbf_get_image_size_fs and cbf_get_image_size_sf 
++        set *ndimslow and *ndimfast to the slow and fast dimensions of the 
++        image array for element number element_number. If the array is 
++        1-dimensional, *ndimslow will be set to the array size and *ndimfast 
++        will be set to 1. If the array is 3-dimensional an error code will be 
++        returned. cbf_get_3d_image_size, cbf_get_3d_image_size_fs and 
++        cbf_get_3d_image_size_sf set *ndimslow, *ndimmid and *ndimfast to the 
++        slowest, next fastest and fastest dimensions, respectively, of the 3D 
++        image array for element number element_number. If the array is 
++        1-dimensional, *ndimslow will be set to the array size and *ndimmid 
++        and
++
++        """
++        return _pycbf.cbf_handle_struct_get_image_size_fs(self, *args)
++
++    def get_divergence(self):
++        """
++        Returns : Float div_x_source,Float div_y_source,Float div_x_y_source
++        *args   : 
++
++        C prototype: int cbf_get_divergence (cbf_handle handle, double *div_x_source,
++                         double      *div_y_source, double *div_x_y_source);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_divergence sets *div_x_source, *div_y_source and 
++        *div_x_y_source to the corresponding source divergence parameters.
++        Any of the destination pointers may be NULL.
++        ARGUMENTS
++        handle           CBF handle. div_x_source     Pointer to the 
++        destination div_x_source. div_y_source     Pointer to the destination 
++        div_y_source. div_x_y_source   Pointer to the destination 
++        div_x_y_source.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_get_divergence(self)
++
++    def rewind_category(self, *args):
++        """
++        Returns : 
++        *args   : 
++
++        C prototype: int cbf_rewind_category (cbf_handle handle);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_rewind_category makes the first category in the current data 
++        block the current category. cbf_rewind_saveframe makes the first 
++        saveframe in the current data block the current saveframe. 
++        cbf_rewind_blockitem makes the first blockitem (category or 
++        saveframe) in the current data block the current blockitem. The type 
++        of the blockitem (CBF_CATEGORY or CBF_SAVEFRAME) is returned in type.
++        If there are no categories, saveframes or blockitems the function 
++        returns CBF_NOTFOUND.
++        The current column and row become undefined.
++        ARGUMENTS
++        handle   CBF handle. type     CBF handle.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_rewind_category(self, *args)
++
++    def read_template(self, *args):
++        """
++        Returns : 
++        *args   : String filename
++
++        C prototype: int cbf_read_template (cbf_handle handle, FILE *file);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_read_template reads the CBF or CIF file file into the CBF object 
++        specified by handle and selects the first datablock as the current 
++        datablock.
++        ARGUMENTS
++        handle   Pointer to a CBF handle. file     Pointer to a file 
++        descriptor.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_read_template(self, *args)
++
++    def select_row(self, *args):
++        """
++        Returns : 
++        *args   : Integer
++
++        C prototype: int cbf_select_row (cbf_handle handle, unsigned int row);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_select_row selects row number row in the current category as the 
++        current row.
++        The first row is number 0.
++        The current column is not affected
++        If the row does not exist, the function returns CBF_NOTFOUND.
++        ARGUMENTS
++        handle   CBF handle. row      Number of the row to select.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_select_row(self, *args)
++
++    def get_image_fs_as_string(self, *args):
++        """
++        Returns : (Binary)String
++        *args   : int element_number,int elsize,int elsign,int ndimfast,int ndimslow
++
++        C prototype: int cbf_get_image_fs (cbf_handle handle, unsigned int reserved,
++                         unsigned      int element_number, void *array, size_t elsize,
++                         int elsign, size_t      ndimfast, size_t ndimslow);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_image, cbf_get_image_fs and cbf_get_image_sf read the image 
++        array for element number element_number into an array. The array 
++        consists of ndimslow *ndimfast elements of elsize bytes each, 
++        starting at array. The elements are signed if elsign is non-0 and 
++        unsigned otherwise. cbf_get_real_image, cbf_get_real_image_fs and 
++        cbf_get_real_image_sf read the image array of IEEE doubles or floats 
++        for element number element_number into an array. A real array is 
++        always signed. cbf_get_3d_image, cbf_get_3d_image_fs and 
++        cbf_get_3d_image_sf read the 3D image array for element number 
++        element_number into an array. The array consists of ndimslow *ndimmid 
++        *ndimfast elements of elsize bytes each, starting at array. The 
++        elements are signed if elsign is non-0 and unsigned otherwise. 
++        cbf_get_real_3d_image, cbf_get_real_3d_image_fs, 
++        cbf_get_real_3d_image_sf reads the 3D image array of IEEE doubles or 
++        floats for element number element_number into an array. A real array 
++        is always signed.
++        The _fs calls give the dimensions in a fast-to-slow order. The calls 
++        with no suffix and the calls _sf calls give the dimensions in 
++        slow-to-fast order
++        The structure of the array as a 1-, 2- or 3-dimensional array should 
++        agree with the structure of the array given in the 
++        ARRAY_STRUCTURE_LIST category. If the array is 1-dimensional, 
++        ndimslow should be the array size and ndimfast and, for the 3D calls, 
++        ndimmid, should be set to 1 both in the call and in the imgCIF data 
++        being processed. If the array is 2-dimensional and a 3D call is used, 
++        ndimslow and ndimmid should be the
++
++        """
++        return _pycbf.cbf_handle_struct_get_image_fs_as_string(self, *args)
++
++    def get_image_size_sf(self, *args):
++        """
++        Returns : size_t ndimslow,size_t ndimfast
++        *args   : Integer element_number
++
++        C prototype: int cbf_get_image_size_sf (cbf_handle handle,
++                         unsigned int reserved,      unsigned int element_number,
++                         size_t *ndimslow, size_t *ndimfast);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_image_size, cbf_get_image_size_fs and cbf_get_image_size_sf 
++        set *ndimslow and *ndimfast to the slow and fast dimensions of the 
++        image array for element number element_number. If the array is 
++        1-dimensional, *ndimslow will be set to the array size and *ndimfast 
++        will be set to 1. If the array is 3-dimensional an error code will be 
++        returned. cbf_get_3d_image_size, cbf_get_3d_image_size_fs and 
++        cbf_get_3d_image_size_sf set *ndimslow, *ndimmid and *ndimfast to the 
++        slowest, next fastest and fastest dimensions, respectively, of the 3D 
++        image array for element number element_number. If the array is 
++        1-dimensional, *ndimslow will be set to the array size and *ndimmid 
++        and
++
++        """
++        return _pycbf.cbf_handle_struct_get_image_size_sf(self, *args)
++
++    def get_real_image_fs_as_string(self, *args):
++        """
++        Returns : (Binary)String
++        *args   : int element_number,int elsize,int ndimfast,int ndimslow
++
++        C prototype: int cbf_get_real_image_fs (cbf_handle handle,
++                         unsigned int reserved,      unsigned int element_number,
++                         void *array, size_t elsize, size_t      ndimfast,
++                         size_t ndimslow);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_image, cbf_get_image_fs and cbf_get_image_sf read the image 
++        array for element number element_number into an array. The array 
++        consists of ndimslow *ndimfast elements of elsize bytes each, 
++        starting at array. The elements are signed if elsign is non-0 and 
++        unsigned otherwise. cbf_get_real_image, cbf_get_real_image_fs and 
++        cbf_get_real_image_sf read the image array of IEEE doubles or floats 
++        for element number element_number into an array. A real array is 
++        always signed. cbf_get_3d_image, cbf_get_3d_image_fs and 
++        cbf_get_3d_image_sf read the 3D image array for element number 
++        element_number into an array. The array consists of ndimslow *ndimmid 
++        *ndimfast elements of elsize bytes each, starting at array. The 
++        elements are signed if elsign is non-0 and unsigned otherwise. 
++        cbf_get_real_3d_image, cbf_get_real_3d_image_fs, 
++        cbf_get_real_3d_image_sf reads the 3D image array of IEEE doubles or 
++        floats for element number element_number into an array. A real array 
++        is always signed.
++        The _fs calls give the dimensions in a fast-to-slow order. The calls 
++        with no suffix and the calls _sf calls give the dimensions in 
++        slow-to-fast order
++        The structure of the array as a 1-, 2- or 3-dimensional array should 
++        agree with the structure of the array given in the 
++        ARRAY_STRUCTURE_LIST category. If the array is 1-dimensional, 
++        ndimslow should be the array size and ndimfast and, for the 3D calls, 
++        ndimmid, should be set to 1 both in the call and in the imgCIF data 
++        being processed. If the array is 2-dimensional and a 3D call is used, 
++        ndimslow and ndimmid should be the
++
++        """
++        return _pycbf.cbf_handle_struct_get_real_image_fs_as_string(self, *args)
++
++    def count_columns(self, *args):
++        """
++        Returns : Integer
++        *args   : 
++
++        C prototype: int cbf_count_columns (cbf_handle handle, unsigned int *columns);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_count_columns puts the number of columns in the current category 
++        in *columns.
++        ARGUMENTS
++        handle    CBF handle. columns   Pointer to the destination column 
++        count.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_count_columns(self, *args)
++
++    def get_integerarrayparameters_wdims(self):
++        """
++        Returns : int compression,int binary_id,int elsize,int elsigned,int elunsigned,
++                  int elements,int minelement,int maxelement,char **bo,int *bolen,
++                  int dimfast,int dimmid,int dimslow,int padding
++        *args   : 
++
++        C prototype: int cbf_get_integerarrayparameters_wdims (cbf_handle handle,
++                         unsigned int    *compression, int *binary_id, size_t *elsize,
++                         int *elsigned, int    *elunsigned, size_t *elements,
++                         int *minelement, int *maxelement, const    char **byteorder,
++                         size_t *dimfast, size_t *dimmid, size_t *dimslow,
++                         size_t    *padding);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_integerarrayparameters sets *compression, *binary_id, 
++        *elsize, *elsigned, *elunsigned, *elements, *minelement and 
++        *maxelement to values read from the binary value of the item at the 
++        current column and row. This provides all the arguments needed for a 
++        subsequent call to cbf_set_integerarray, if a copy of the array is to 
++        be made into another CIF or CBF. cbf_get_realarrayparameters sets 
++        *compression, *binary_id, *elsize, *elements to values read from the 
++        binary value of the item at the current column and row. This provides 
++        all the arguments needed for a subsequent call to cbf_set_realarray, 
++        if a copy of the arry is to be made into another CIF or CBF.
++        The variants cbf_get_integerarrayparameters_wdims, 
++        cbf_get_integerarrayparameters_wdims_fs, 
++        cbf_get_integerarrayparameters_wdims_sf, 
++        cbf_get_realarrayparameters_wdims, 
++        cbf_get_realarrayparameters_wdims_fs, 
++        cbf_get_realarrayparameters_wdims_sf set **byteorder, *dimfast, 
++        *dimmid, *dimslow, and *padding as well, providing the additional 
++        parameters needed for a subsequent call to cbf_set_integerarray_wdims 
++        or cbf_set_realarray_wdims.
++        The value returned in *byteorder is a pointer either to the string  
++        "little_endian " or to the string  "big_endian ". This should be 
++        the byte order of the data, not necessarily of the host machine. No 
++        attempt should be made to modify this string. At this time only  
++        "little_endian " will be returned.
++        The values returned in *dimfast, *dimmid and *dimslow are the sizes 
++        of the fastest changing, second fastest changing and third fastest 
++        changing dimensions of the array, if specified, or zero, if not 
++        specified.
++        The value returned in *padding is the size of the post-data padding, 
++        if any and if specified in the data header. The value is given as a 
++        count of octets.
++        If the value is not binary, the function returns CBF_ASCII.
++        ARGUMENTS
++        handle        CBF handle. compression   Compression method used. 
++        elsize        Size in bytes of each array element. binary_id     
++        Pointer to the destination integer binary identifier. elsigned      
++        Pointer to an integer. Set to 1 if the elements can be read as signed 
++        integers. elunsigned    Pointer to an integer. Set to 1 if the 
++        elements can be read as unsigned integers. elements      Pointer to 
++        the destination number of elements. minelement    Pointer to the 
++        destination smallest element. maxelement    Pointer to the 
++        destination largest element. byteorder     Pointer to the destination 
++        byte order. dimfast       Pointer to the destination fastest 
++        dimension. dimmid        Pointer to the destination second fastest 
++        dimension. dimslow       Pointer to the destination third fastest 
++        dimension. padding       Pointer to the destination padding size.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_get_integerarrayparameters_wdims(self)
++
++    def get_gain(self, *args):
++        """
++        Returns : Float gain,Float gain_esd
++        *args   : 
++
++        C prototype: int cbf_get_gain (cbf_handle handle, unsigned int element_number,
++                         double      *gain, double *gain_esd);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_gain sets *gain and *gain_esd to the corresponding gain 
++        parameters for element number element_number.
++        Either of the destination pointers may be NULL.
++        ARGUMENTS
++        handle           CBF handle. element_number   The number of the 
++        detector element counting from 0 by order of appearance in the  
++        "diffrn_data_frame " category. gain             Pointer to the 
++        destination gain. gain_esd         Pointer to the destination 
++        gain_esd.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_get_gain(self, *args)
++
++    def new_saveframe(self, *args):
++        """
++        Returns : string
++        *args   : 
++
++        C prototype: int cbf_new_saveframe (cbf_handle handle,
++                         const char *saveframename);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_new_datablock creates a new data block with name datablockname 
++        and makes it the current data block. cbf_new_saveframe creates a new 
++        save frame with name saveframename within the current data block and 
++        makes the new save frame the current save frame.
++        If a data block or save frame with this name already exists, the 
++        existing data block or save frame becomes the current data block or 
++        save frame.
++        ARGUMENTS
++        handle          CBF handle. datablockname   The name of the new data 
++        block. saveframename   The name of the new save frame.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_new_saveframe(self, *args)
++
++    def set_polarization(self, *args):
++        """
++        Returns : 
++        *args   : Float polarizn_source_ratio,Float polarizn_source_norm
++
++        C prototype: int cbf_set_polarization (cbf_handle handle,
++                         double      polarizn_source_ratio,
++                         double polarizn_source_norm);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_polarization sets the source polarization to the values 
++        specified by polarizn_source_ratio and polarizn_source_norm.
++        ARGUMENTS
++        handle                  CBF handle. polarizn_source_ratio   New value 
++        of polarizn_source_ratio. polarizn_source_norm    New value of 
++        polarizn_source_norm.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_polarization(self, *args)
++
++    def set_real_3d_image(self, *args):
++        """
++        Returns : 
++        *args   : int element_number,int compression,(binary) String data,int elsize,
++                  int dimslow,int dimmid,int dimfast
++
++        C prototype: int cbf_set_real_3d_image (cbf_handle handle,
++                         unsigned int reserved,      unsigned int element_number,
++                         unsigned int compression, void      *array,size_t elsize,
++                         size_t ndimslow, size_t ndimmid, size_t ndimfast);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_image, cbf_set_image_fs and cbf_set_image_sf write the image 
++        array for element number element_number. The array consists of 
++        ndimfast *ndimslow elements of elsize bytes each, starting at array. 
++        The elements are signed if elsign is non-zero and unsigned otherwise. 
++        cbf_set_real_image, cbf_set_real_image_fs and cbf_set_real_image_sf 
++        write the image array for element number element_number. The array 
++        consists of ndimfast *ndimslow IEEE double or float elements of 
++        elsize bytes each, starting at array. cbf_set_3d_image, 
++        cbf_set_3d_image_fs and cbf_set_3d_image_sf write the 3D image array 
++        for element number element_number. The array consists of ndimfast 
++        *ndimmid *ndimslow elements of elsize bytes each, starting at array. 
++        The elements are signed if elsign is non-0 and unsigned otherwise. 
++        cbf_set_real_3d_image, cbf_set_real_3d_image_fs and 
++        cbf_set_real_3d_image_sf writes the 3D image array for element number 
++        element_number. The array consists of ndimfast *ndimmid *ndimslow 
++        IEEE double or float elements of elsize bytes each, starting at 
++        array.
++        The _fs calls give the dimensions in a fast-to-slow order. The calls 
++        with no suffix and the calls _sf calls give the dimensions in 
++        slow-to-fast order
++        If the array is 1-dimensional, ndimslow should be the array size and 
++        ndimfast and, for the 3D calls, ndimmid, should be set to 1. If the 
++        array is 2-dimensional and the 3D calls are used, ndimslow and 
++        ndimmid should be used for the array dimensions and ndimfast should 
++        be set to 1.
++        The array will be compressed using the compression scheme specifed by 
++        compression. Currently, the available schemes are:
++        CBF_CANONICAL   Canonical-code compression (section 3.3.1) CBF_PACKED 
++             CCP4-style packing (section 3.3.2) CBF_PACKED_V2     CCP4-style 
++        packing, version 2 (section 3.3.2) CBF_BYTE_OFFSET   Simple  
++        "byte_offset " compression. CBF_NONE        No compression.
++        The values compressed are limited to 64 bits. If any element in the 
++        array is larger than 64 bits, the value compressed is the nearest 
++        64-bit value.
++        Currently, the source array must consist of chars, shorts or ints 
++        (signed or unsigned)for cbf_set_image, or IEEE doubles or floats for 
++        cbf_set_real_image. If elsize is not equal to sizeof (short), sizeof 
++        (int), sizeof(double) or sizeof(float), the function returns 
++        CBF_ARGUMENT.
++        The parameter reserved is presently unused and should be set to 0.
++        ARGUMENTS
++        handle           CBF handle. reserved         Unused. Any value other 
++        than 0 is invalid. element_number   The number of the detector 
++        element counting from 0 by order of appearance in the  
++        "diffrn_data_frame " category. compression      Compression type. 
++        array            Pointer to the image array. elsize           Size in 
++        bytes of each image array element. elsigned         Set to non-0 if 
++        the image array elements are signed. ndimslow         Slowest array 
++        dimension. ndimmid          Second slowest array dimension. ndimfast  
++               Fastest array dimension.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_real_3d_image(self, *args)
++
++    def delete_row(self, *args):
++        """
++        Returns : 
++        *args   : Integer
++
++        C prototype: int cbf_delete_row (cbf_handle handle, unsigned int rownumber);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_delete_row deletes a row from the current category. Rows starting 
++        from rownumber +1 are moved down by 1. If the current row was higher 
++        than rownumber, or if the current row is the last row, it will also 
++        move down by 1.
++        The row numbers start from 0.
++        ARGUMENTS
++        handle      CBF handle. rownumber   The number of the row to delete.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_delete_row(self, *args)
++
++    def column_name(self, *args):
++        """
++        Returns : 
++        *args   : string
++
++        C prototype: int cbf_column_name (cbf_handle handle, const char **columnname);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_column_name sets *columnname to point to the name of the current 
++        column of the current category.
++        The column name will be valid as long as the column exists.
++        The name must not be modified by the program in any way.
++        cbf_set_column_name sets the name of the current column to 
++        newcolumnname
++        ARGUMENTS
++        handle          CBF handle. columnname      Pointer to the 
++        destination column name pointer. newcolumnname   New column name 
++        pointer.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_column_name(self, *args)
++
++    def remove_saveframe(self, *args):
++        """
++        Returns : 
++        *args   : 
++
++        C prototype: int cbf_remove_saveframe (cbf_handle handle);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_remove_datablock deletes the current data block. 
++        cbf_remove_saveframe deletes the current save frame.
++        The current data block becomes undefined.
++        ARGUMENTS
++        handle   CBF handle.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_remove_saveframe(self, *args)
++
++    def set_integerarray_wdims_sf(self, *args):
++        """
++        Returns : 
++        *args   : int compression,int binary_id,(binary) String data,int elsize,
++                  int elements,String byteorder,int dimslow,int dimmid,int dimfast,
++                  int padding
++
++        C prototype: int cbf_set_integerarray_wdims_sf (cbf_handle handle,
++                         unsigned int    compression, int binary_id, void *array,
++                         size_t elsize, int elsigned,    size_t elements,
++                         const char *byteorder, size_t dimslow, size_t dimmid,
++                            size_t dimfast, size_t padding);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_integerarray sets the binary value of the item at the current 
++        column and row to an integer array. The array consists of elements 
++        elements of elsize bytes each, starting at array. The elements are 
++        signed if elsigned is non-0 and unsigned otherwise. binary_id is the 
++        binary section identifier. cbf_set_realarray sets the binary value of 
++        the item at the current column and row to an integer array. The array 
++        consists of elements elements of elsize bytes each, starting at 
++        array. binary_id is the binary section identifier.
++        The cbf_set_integerarray_wdims, cbf_set_integerarray_wdims_fs, 
++        cbf_set_integerarray_wdims_sf, cbf_set_realarray_wdims, 
++        cbf_set_realarray_wdims_fs and cbf_set_realarray_wdims_sf variants 
++        allow the data header values of byteorder, dimfast, dimmid, dimslow 
++        and padding to be set to the data byte order, the fastest, second 
++        fastest and third fastest array dimensions and the size in byte of 
++        the post data padding to be used.
++        The array will be compressed using the compression scheme specifed by 
++        compression. Currently, the available schemes are:
++        CBF_CANONICAL     Canonical-code compression (section 3.3.1) 
++        CBF_PACKED        CCP4-style packing (section 3.3.2) CBF_PACKED_V2    
++         CCP4-style packing, version 2 (section 3.3.2) CBF_BYTE_OFFSET   
++        Simple  "byte_offset " compression. CBF_NONE          No 
++        compression. NOTE: This scheme is by far the slowest of the four and 
++        uses much more disk space. It is intended for routine use with small 
++        arrays only. With large arrays (like images) it should be used only 
++        for debugging.
++        The values compressed are limited to 64 bits. If any element in the 
++        array is larger than 64 bits, the value compressed is the nearest 
++        64-bit value.
++        Currently, the source array must consist of chars, shorts or ints 
++        (signed or unsigned), for cbf_set_integerarray, or IEEE doubles or 
++        floats for cbf_set_realarray. If elsize is not equal to sizeof 
++        (char), sizeof (short) or sizeof (int), the function returns 
++        CBF_ARGUMENT.
++        ARGUMENTS
++        handle        CBF handle. compression   Compression method to use. 
++        binary_id     Integer binary identifier. array         Pointer to the 
++        source array. elsize        Size in bytes of each source array 
++        element. elsigned      Set to non-0 if the source array elements are 
++        signed. elements: The number of elements in the array.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_set_integerarray_wdims_sf(self, *args)
++
++    def require_value(self, *args):
++        """
++        Returns : String Value
++        *args   : String defaultvalue
++
++        C prototype: int cbf_require_value (cbf_handle handle, const char **value,
++                         const char    *defaultvalue );
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_value sets *value to point to the ASCII value of the item at 
++        the current column and row. cbf_require_value sets *value to point to 
++        the ASCII value of the item at the current column and row, creating 
++        the data item if necessary and initializing it to a copy of 
++        defaultvalue.
++        If the value is not ASCII, the function returns CBF_BINARY.
++        The value will be valid as long as the item exists and has not been 
++        set to a new value.
++        The value must not be modified by the program in any way.
++        ARGUMENTS
++        handle         CBF handle. value          Pointer to the destination 
++        value pointer. defaultvalue   Default value character string.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_require_value(self, *args)
++
++    def require_column_integervalue(self, *args):
++        """
++        Returns : Int Value
++        *args   : String Columnvalue,Int default
++
++        C prototype: int cbf_require_column_integervalue (cbf_handle handle,
++                         const char      *columnname, int *number,
++                         const int defaultvalue);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_require_column_doublevalue sets *number to the value of the ASCII 
++        item at the current row for the column given with the name given by 
++        *columnname, with the value interpreted as an integer number, or to 
++        the number given by defaultvalue if the item cannot be found.
++        ARGUMENTS
++        handle         CBF handle. columnname     Name of the column 
++        containing the number. number         pointer to the location to 
++        receive the integer value. defaultvalue   Value to use if the 
++        requested column and value cannot be found.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_require_column_integervalue(self, *args)
++
++    def set_pixel_size(self, *args):
++        """
++        Returns : 
++        *args   : Int element_number,Int axis_number,Float pixel size
++
++        C prototype: int cbf_set_pixel_size (cbf_handle handle,
++                         unsigned int element_number,      int axis_number,
++                         double psize);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_pixel_size and cbf_set_pixel_size_sf set the item in the 
++        "e;size"e; column of the  "array_structure_list " category 
++        at the row which matches axis axis_number of the detector element 
++        element_number converting the double pixel size psize from meters to 
++        millimeters in storing it in the  "size " column for the axis 
++        axis_number of the detector element element_number. The axis_number 
++        is numbered from 1, starting with the slowest axis. 
++        cbf_set_pixel_size_fs sets the item
++
++        """
++        return _pycbf.cbf_handle_struct_set_pixel_size(self, *args)
++
++    def next_column(self, *args):
++        """
++        Returns : 
++        *args   : 
++
++        C prototype: int cbf_next_column (cbf_handle handle);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_next_column makes the column following the current column in the 
++        current category the current column.
++        If there are no more columns, the function returns CBF_NOTFOUND.
++        The current row is not affected.
++        ARGUMENTS
++        handle   CBF handle.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_next_column(self, *args)
++
++    def get_3d_image_size_sf(self, *args):
++        """
++        Returns : size_t ndimslow,size_t ndimmid,size_t ndimfast
++        *args   : Integer element_number
++
++        C prototype: int cbf_get_3d_image_size_sf (cbf_handle handle,
++                         unsigned int reserved,      unsigned int element_number,
++                         size_t *ndimslow, size_t *ndimmid, size_t      *ndimfast);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_image_size, cbf_get_image_size_fs and cbf_get_image_size_sf 
++        set *ndimslow and *ndimfast to the slow and fast dimensions of the 
++        image array for element number element_number. If the array is 
++        1-dimensional, *ndimslow will be set to the array size and *ndimfast 
++        will be set to 1. If the array is 3-dimensional an error code will be 
++        returned. cbf_get_3d_image_size, cbf_get_3d_image_size_fs and 
++        cbf_get_3d_image_size_sf set *ndimslow, *ndimmid and *ndimfast to the 
++        slowest, next fastest and fastest dimensions, respectively, of the 3D 
++        image array for element number element_number. If the array is 
++        1-dimensional, *ndimslow will be set to the array size and *ndimmid 
++        and
++
++        """
++        return _pycbf.cbf_handle_struct_get_3d_image_size_sf(self, *args)
++
++    def get_realarrayparameters_wdims_fs(self):
++        """
++        Returns : int compression,int binary_id,int elsize,int elements,char **bo,
++                  int *bolen,int dimfast,int dimmid,int dimslow,int padding
++        *args   : 
++
++        C prototype: int cbf_get_realarrayparameters_wdims_fs (cbf_handle handle,
++                         unsigned int    *compression, int *binary_id, size_t *elsize,
++                         size_t *elements, const char    **byteorder, size_t *dimfast,
++                         size_t *dimmid, size_t *dimslow, size_t    *padding);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_integerarrayparameters sets *compression, *binary_id, 
++        *elsize, *elsigned, *elunsigned, *elements, *minelement and 
++        *maxelement to values read from the binary value of the item at the 
++        current column and row. This provides all the arguments needed for a 
++        subsequent call to cbf_set_integerarray, if a copy of the array is to 
++        be made into another CIF or CBF. cbf_get_realarrayparameters sets 
++        *compression, *binary_id, *elsize, *elements to values read from the 
++        binary value of the item at the current column and row. This provides 
++        all the arguments needed for a subsequent call to cbf_set_realarray, 
++        if a copy of the arry is to be made into another CIF or CBF.
++        The variants cbf_get_integerarrayparameters_wdims, 
++        cbf_get_integerarrayparameters_wdims_fs, 
++        cbf_get_integerarrayparameters_wdims_sf, 
++        cbf_get_realarrayparameters_wdims, 
++        cbf_get_realarrayparameters_wdims_fs, 
++        cbf_get_realarrayparameters_wdims_sf set **byteorder, *dimfast, 
++        *dimmid, *dimslow, and *padding as well, providing the additional 
++        parameters needed for a subsequent call to cbf_set_integerarray_wdims 
++        or cbf_set_realarray_wdims.
++        The value returned in *byteorder is a pointer either to the string  
++        "little_endian " or to the string  "big_endian ". This should be 
++        the byte order of the data, not necessarily of the host machine. No 
++        attempt should be made to modify this string. At this time only  
++        "little_endian " will be returned.
++        The values returned in *dimfast, *dimmid and *dimslow are the sizes 
++        of the fastest changing, second fastest changing and third fastest 
++        changing dimensions of the array, if specified, or zero, if not 
++        specified.
++        The value returned in *padding is the size of the post-data padding, 
++        if any and if specified in the data header. The value is given as a 
++        count of octets.
++        If the value is not binary, the function returns CBF_ASCII.
++        ARGUMENTS
++        handle        CBF handle. compression   Compression method used. 
++        elsize        Size in bytes of each array element. binary_id     
++        Pointer to the destination integer binary identifier. elsigned      
++        Pointer to an integer. Set to 1 if the elements can be read as signed 
++        integers. elunsigned    Pointer to an integer. Set to 1 if the 
++        elements can be read as unsigned integers. elements      Pointer to 
++        the destination number of elements. minelement    Pointer to the 
++        destination smallest element. maxelement    Pointer to the 
++        destination largest element. byteorder     Pointer to the destination 
++        byte order. dimfast       Pointer to the destination fastest 
++        dimension. dimmid        Pointer to the destination second fastest 
++        dimension. dimslow       Pointer to the destination third fastest 
++        dimension. padding       Pointer to the destination padding size.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_get_realarrayparameters_wdims_fs(self)
++
++    def get_realarray_as_string(self):
++        """
++        Returns : (Binary)String
++        *args   : 
++
++        C prototype: int cbf_get_realarray (cbf_handle handle, int *binary_id,
++                         void *array,    size_t elsize, size_t elements,
++                         size_t *elements_read);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_integerarray reads the binary value of the item at the 
++        current column and row into an integer array. The array consists of 
++        elements elements of elsize bytes each, starting at array. The 
++        elements are signed if elsigned is non-0 and unsigned otherwise. 
++        *binary_id is set to the binary section identifier and *elements_read 
++        to the number of elements actually read. cbf_get_realarray reads the 
++        binary value of the item at the current column and row into a real 
++        array. The array consists of elements elements of elsize bytes each, 
++        starting at array. *binary_id is set to the binary section identifier 
++        and *elements_read to the number of elements actually read.
++        If any element in the integer binary data cant fit into the 
++        destination element, the destination is set the nearest possible 
++        value.
++        If the value is not binary, the function returns CBF_ASCII.
++        If the requested number of elements cant be read, the function will 
++        read as many as it can and then return CBF_ENDOFDATA.
++        Currently, the destination array must consist of chars, shorts or 
++        ints (signed or unsigned). If elsize is not equal to sizeof (char), 
++        sizeof (short) or sizeof (int), for cbf_get_integerarray, or 
++        sizeof(double) or sizeof(float), for cbf_get_realarray the function 
++        returns CBF_ARGUMENT.
++        An additional restriction in the current version of CBFlib is that 
++        values too large to fit in an int are not correctly decompressed. As 
++        an example, if the machine with 32-bit ints is reading an array 
++        containing a value outside the range 0 .. 2^32-1 (unsigned) or -2^31 
++        .. 2^31-1 (signed), the array will not be correctly decompressed. 
++        This restriction will be removed in a future release. For 
++        cbf_get_realarray, only IEEE format is supported. No conversion to 
++        other floating point formats is done at this time.
++        ARGUMENTS
++        handle          CBF handle. binary_id       Pointer to the 
++        destination integer binary identifier. array           Pointer to the 
++        destination array. elsize          Size in bytes of each destination 
++        array element. elsigned        Set to non-0 if the destination array 
++        elements are signed. elements        The number of elements to read. 
++        elements_read   Pointer to the destination number of elements 
++        actually read.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success. SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_get_realarray_as_string(self)
++
++    def get_bin_sizes(self, *args):
++        """
++        Returns : Float slowbinsize,Float fastbinsize
++        *args   : Integer element_number
++
++        C prototype: int cbf_get_bin_sizes(cbf_handle handle,
++                         unsigned int element_number,      double * slowbinsize,
++                         double * fastbinsize);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_bin_sizes sets slowbinsize to point to the value of the 
++        number of pixels composing one array element in the dimension that 
++        changes at the second-fastest rate and fastbinsize to point to the 
++        value of the number of pixels composing one array element in the 
++        dimension that changes at the fastest rate for the dectector element 
++        with the ordinal element_number. cbf_set_bin_sizes sets the the pixel 
++        bin sizes in the  "array_intensities " category to the values of 
++        slowbinsize_in for the number of pixels composing one array element 
++        in the dimension that changes at the second-fastest rate and 
++        fastbinsize_in for the number of pixels composing one array element 
++        in the dimension that changes at the fastest rate for the dectector 
++        element with the ordinal element_number.
++        In order to allow for software binning involving fractions of pixels, 
++        the bin sizes are doubles rather than ints.
++        ARGUMENTS
++        handle           CBF handle. element_number   The number of the 
++        detector element counting from 0 by order of appearance in the  
++        "diffrn_data_frame " category. slowbinsize      Pointer to the 
++        returned number of pixels composing one array element in the 
++        dimension that changes at the second-fastest rate. fastbinsize      
++        Pointer to the returned number of pixels composing one array element 
++        in the dimension that changes at the fastest rate. slowbinsize_in   
++        The number of pixels composing one array element in the dimension 
++        that changes at the second-fastest rate. fastbinsize_in   The number 
++        of pixels composing one array element in the dimension that changes 
++        at the fastest rate.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_get_bin_sizes(self, *args)
++
++    def reset_category(self, *args):
++        """
++        Returns : 
++        *args   : 
++
++        C prototype: int cbf_reset_category (cbf_handle handle);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_reset_category deletes all columns and rows from current category.
++        ARGUMENTS
++        handle   CBF handle.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_reset_category(self, *args)
++
++    def construct_goniometer(self):
++        """
++        Returns : pycbf goniometer object
++        *args   : 
++
++        C prototype: int cbf_construct_goniometer (cbf_handle handle,
++                         cbf_goniometer      *goniometer);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_construct_goniometer constructs a goniometer object using the 
++        description in the CBF object handle and initialises the goniometer 
++        handle *goniometer.
++        ARGUMENTS
++        handle       CBF handle. goniometer   Pointer to the destination 
++        goniometer handle.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_construct_goniometer(self)
++
++    def set_datablockname(self, *args):
++        """
++        Returns : string
++        *args   : 
++
++        C prototype: int cbf_set_datablockname (cbf_handle handle,
++                         const char *datablockname);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_datablockname changes the name of the current data block to 
++        datablockname. cbf_set_saveframename changes the name of the current 
++        save frame to saveframename.
++        If a data block or save frame with this name already exists 
++        (comparison is case-insensitive), the function returns CBF_IDENTICAL.
++        ARGUMENTS
++        handle          CBF handle. datablockname   The new data block name. 
++        datablockname   The new save frame name.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_set_datablockname(self, *args)
++
++    def set_crystal_id(self, *args):
++        """
++        Returns : string
++        *args   : 
++
++        C prototype: int cbf_set_crystal_id (cbf_handle handle,
++                         const char *crystal_id);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_crystal_id sets the  "diffrn.crystal_id " entry to the 
++        ASCII value crystal_id.
++        ARGUMENTS
++        handle       CBF handle. crystal_id   ASCII value.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_crystal_id(self, *args)
++
++    def get_integerarray_as_string(self):
++        """
++        Returns : (Binary)String
++        *args   : 
++
++        C prototype: int cbf_get_integerarray (cbf_handle handle, int *binary_id,
++                         void *array,    size_t elsize, int elsigned, size_t elements,
++                         size_t *elements_read);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_integerarray reads the binary value of the item at the 
++        current column and row into an integer array. The array consists of 
++        elements elements of elsize bytes each, starting at array. The 
++        elements are signed if elsigned is non-0 and unsigned otherwise. 
++        *binary_id is set to the binary section identifier and *elements_read 
++        to the number of elements actually read. cbf_get_realarray reads the 
++        binary value of the item at the current column and row into a real 
++        array. The array consists of elements elements of elsize bytes each, 
++        starting at array. *binary_id is set to the binary section identifier 
++        and *elements_read to the number of elements actually read.
++        If any element in the integer binary data cant fit into the 
++        destination element, the destination is set the nearest possible 
++        value.
++        If the value is not binary, the function returns CBF_ASCII.
++        If the requested number of elements cant be read, the function will 
++        read as many as it can and then return CBF_ENDOFDATA.
++        Currently, the destination array must consist of chars, shorts or 
++        ints (signed or unsigned). If elsize is not equal to sizeof (char), 
++        sizeof (short) or sizeof (int), for cbf_get_integerarray, or 
++        sizeof(double) or sizeof(float), for cbf_get_realarray the function 
++        returns CBF_ARGUMENT.
++        An additional restriction in the current version of CBFlib is that 
++        values too large to fit in an int are not correctly decompressed. As 
++        an example, if the machine with 32-bit ints is reading an array 
++        containing a value outside the range 0 .. 2^32-1 (unsigned) or -2^31 
++        .. 2^31-1 (signed), the array will not be correctly decompressed. 
++        This restriction will be removed in a future release. For 
++        cbf_get_realarray, only IEEE format is supported. No conversion to 
++        other floating point formats is done at this time.
++        ARGUMENTS
++        handle          CBF handle. binary_id       Pointer to the 
++        destination integer binary identifier. array           Pointer to the 
++        destination array. elsize          Size in bytes of each destination 
++        array element. elsigned        Set to non-0 if the destination array 
++        elements are signed. elements        The number of elements to read. 
++        elements_read   Pointer to the destination number of elements 
++        actually read.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success. SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_get_integerarray_as_string(self)
++
++    def set_3d_image(self, *args):
++        """
++        Returns : 
++        *args   : int element_number,int compression,(binary) String data,int elsize,
++                  int elsign,int dimslow,int dimmid,int dimfast
++
++        C prototype: int cbf_set_3d_image (cbf_handle handle, unsigned int reserved,
++                         unsigned      int element_number, unsigned int compression,
++                         void *array, size_t      elsize, int elsign, size_t ndimslow,
++                         size_t ndimmid, size_t ndimfast);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_image, cbf_set_image_fs and cbf_set_image_sf write the image 
++        array for element number element_number. The array consists of 
++        ndimfast *ndimslow elements of elsize bytes each, starting at array. 
++        The elements are signed if elsign is non-zero and unsigned otherwise. 
++        cbf_set_real_image, cbf_set_real_image_fs and cbf_set_real_image_sf 
++        write the image array for element number element_number. The array 
++        consists of ndimfast *ndimslow IEEE double or float elements of 
++        elsize bytes each, starting at array. cbf_set_3d_image, 
++        cbf_set_3d_image_fs and cbf_set_3d_image_sf write the 3D image array 
++        for element number element_number. The array consists of ndimfast 
++        *ndimmid *ndimslow elements of elsize bytes each, starting at array. 
++        The elements are signed if elsign is non-0 and unsigned otherwise. 
++        cbf_set_real_3d_image, cbf_set_real_3d_image_fs and 
++        cbf_set_real_3d_image_sf writes the 3D image array for element number 
++        element_number. The array consists of ndimfast *ndimmid *ndimslow 
++        IEEE double or float elements of elsize bytes each, starting at 
++        array.
++        The _fs calls give the dimensions in a fast-to-slow order. The calls 
++        with no suffix and the calls _sf calls give the dimensions in 
++        slow-to-fast order
++        If the array is 1-dimensional, ndimslow should be the array size and 
++        ndimfast and, for the 3D calls, ndimmid, should be set to 1. If the 
++        array is 2-dimensional and the 3D calls are used, ndimslow and 
++        ndimmid should be used for the array dimensions and ndimfast should 
++        be set to 1.
++        The array will be compressed using the compression scheme specifed by 
++        compression. Currently, the available schemes are:
++        CBF_CANONICAL   Canonical-code compression (section 3.3.1) CBF_PACKED 
++             CCP4-style packing (section 3.3.2) CBF_PACKED_V2     CCP4-style 
++        packing, version 2 (section 3.3.2) CBF_BYTE_OFFSET   Simple  
++        "byte_offset " compression. CBF_NONE        No compression.
++        The values compressed are limited to 64 bits. If any element in the 
++        array is larger than 64 bits, the value compressed is the nearest 
++        64-bit value.
++        Currently, the source array must consist of chars, shorts or ints 
++        (signed or unsigned)for cbf_set_image, or IEEE doubles or floats for 
++        cbf_set_real_image. If elsize is not equal to sizeof (short), sizeof 
++        (int), sizeof(double) or sizeof(float), the function returns 
++        CBF_ARGUMENT.
++        The parameter reserved is presently unused and should be set to 0.
++        ARGUMENTS
++        handle           CBF handle. reserved         Unused. Any value other 
++        than 0 is invalid. element_number   The number of the detector 
++        element counting from 0 by order of appearance in the  
++        "diffrn_data_frame " category. compression      Compression type. 
++        array            Pointer to the image array. elsize           Size in 
++        bytes of each image array element. elsigned         Set to non-0 if 
++        the image array elements are signed. ndimslow         Slowest array 
++        dimension. ndimmid          Second slowest array dimension. ndimfast  
++               Fastest array dimension.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_3d_image(self, *args)
++
++    def set_dictionary(self, *args):
++        """
++        Returns : 
++        *args   : CBFHandle dictionary
++
++        C prototype: int cbf_set_dictionary (cbf_handle handle,
++                         cbf_handle dictionary_in);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_dictionary sets *dictionary to the handle of a CBF which has 
++        been associated with the CBF handle by cbf_set_dictionary. 
++        cbf_set_dictionary associates the CBF handle dictionary_in with 
++        handle as its dictionary. cbf_require_dictionary sets *dictionary to 
++        the handle of a CBF which has been associated with the CBF handle by 
++        cbf_set_dictionary or creates a new empty CBF and associates it with 
++        handle, returning the new handle in *dictionary.
++        ARGUMENTS
++        handle          CBF handle. dictionary      Pointer to CBF handle of 
++        dictionary. dictionary_in   CBF handle of dcitionary.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_dictionary(self, *args)
++
++    def find_tag_category(self, *args):
++        """
++        Returns : String categoryname
++        *args   : String tagname
++
++        C prototype: int cbf_find_tag_category (cbf_handle handle,
++                         const char* tagname, const      char** categoryname);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_find_tag_category sets categoryname to the category associated 
++        with tagname in the dictionary associated with handle. 
++        cbf_set_tag_category upddates the dictionary associated with handle 
++        to indicated that tagname is in category categoryname_in.
++        ARGUMENTS
++        handle            CBF handle. tagname           tag name. 
++        categoryname      pointer to a returned category name. 
++        categoryname_in   input category name.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_find_tag_category(self, *args)
++
++    def get_real_3d_image_sf_as_string(self, *args):
++        """
++        Returns : (Binary)String
++        *args   : int element_number,int elsize,int ndimslow,int ndimmid,int ndimfast
++
++        C prototype: int cbf_get_real_3d_image_sf (cbf_handle handle,
++                         unsigned int reserved,      unsigned int element_number,
++                         void *array, size_t elsize, size_t      ndimslow,
++                         size_t ndimmid, size_t ndimfast);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_image, cbf_get_image_fs and cbf_get_image_sf read the image 
++        array for element number element_number into an array. The array 
++        consists of ndimslow *ndimfast elements of elsize bytes each, 
++        starting at array. The elements are signed if elsign is non-0 and 
++        unsigned otherwise. cbf_get_real_image, cbf_get_real_image_fs and 
++        cbf_get_real_image_sf read the image array of IEEE doubles or floats 
++        for element number element_number into an array. A real array is 
++        always signed. cbf_get_3d_image, cbf_get_3d_image_fs and 
++        cbf_get_3d_image_sf read the 3D image array for element number 
++        element_number into an array. The array consists of ndimslow *ndimmid 
++        *ndimfast elements of elsize bytes each, starting at array. The 
++        elements are signed if elsign is non-0 and unsigned otherwise. 
++        cbf_get_real_3d_image, cbf_get_real_3d_image_fs, 
++        cbf_get_real_3d_image_sf reads the 3D image array of IEEE doubles or 
++        floats for element number element_number into an array. A real array 
++        is always signed.
++        The _fs calls give the dimensions in a fast-to-slow order. The calls 
++        with no suffix and the calls _sf calls give the dimensions in 
++        slow-to-fast order
++        The structure of the array as a 1-, 2- or 3-dimensional array should 
++        agree with the structure of the array given in the 
++        ARRAY_STRUCTURE_LIST category. If the array is 1-dimensional, 
++        ndimslow should be the array size and ndimfast and, for the 3D calls, 
++        ndimmid, should be set to 1 both in the call and in the imgCIF data 
++        being processed. If the array is 2-dimensional and a 3D call is used, 
++        ndimslow and ndimmid should be the
++
++        """
++        return _pycbf.cbf_handle_struct_get_real_3d_image_sf_as_string(self, *args)
++
++    def set_typeofvalue(self, *args):
++        """
++        Returns : string
++        *args   : 
++
++        C prototype: int cbf_set_typeofvalue (cbf_handle handle,
++                         const char *typeofvalue);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_typeofvalue sets the type of the item at the current column 
++        and row to the type specified by the ASCII character string given by 
++        typeofvalue. The strings that may be used are:
++         "null " for a null value indicated by a  ". " or a  "? "  
++        "bnry " for a binary value  "word " for an unquoted string  
++        "dblq " for a double-quoted string  "sglq " for a single-quoted 
++        string  "text " for a semicolon-quoted string (multiline text 
++        field)  "prns " for a parenthesis-bracketed string (multiline text 
++        field)  "brcs " for a brace-bracketed string (multiline text field) 
++         "bkts " for a square-bracket-bracketed string (multiline text 
++        field)  "tsqs " for a treble-single-quote quoted string (multiline 
++        text field)  "tdqs " for a treble-double-quote quoted string 
++        (multiline text field)
++        Not all types may be used for all values. Not all types are valid for 
++        all type of CIF files. In partcular the types  "prns ",  "brcs ", 
++         "bkts " were introduced with DDLm and are not valid in DDL1 or 
++        DDL2 CIFS. The types  "tsqs " and  "tdqs " are not formally part 
++        of the CIF syntax. No changes may be made to the type of binary 
++        values. You may not set the type of a string that contains a single 
++        quote followed by a blank or a tab or which contains multiple lines 
++        to  "sglq ". You may not set the type of a string that contains a 
++        double quote followed by a blank or a tab or which contains multiple 
++        lines to  "dblq ".
++        ARGUMENTS
++        handle        CBF handle. typeofvalue   ASCII string for desired type 
++        of value.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_set_typeofvalue(self, *args)
++
++    def set_integerarray_wdims(self, *args):
++        """
++        Returns : 
++        *args   : int compression,int binary_id,(binary) String data,int elsize,
++                  int elements,String byteorder,int dimfast,int dimmid,int dimslow,
++                  int padding
++
++        C prototype: int cbf_set_integerarray_wdims (cbf_handle handle,
++                         unsigned int    compression, int binary_id, void *array,
++                         size_t elsize, int elsigned,    size_t elements,
++                         const char *byteorder, size_t dimfast, size_t dimmid,
++                            size_t dimslow, size_t padding);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_integerarray sets the binary value of the item at the current 
++        column and row to an integer array. The array consists of elements 
++        elements of elsize bytes each, starting at array. The elements are 
++        signed if elsigned is non-0 and unsigned otherwise. binary_id is the 
++        binary section identifier. cbf_set_realarray sets the binary value of 
++        the item at the current column and row to an integer array. The array 
++        consists of elements elements of elsize bytes each, starting at 
++        array. binary_id is the binary section identifier.
++        The cbf_set_integerarray_wdims, cbf_set_integerarray_wdims_fs, 
++        cbf_set_integerarray_wdims_sf, cbf_set_realarray_wdims, 
++        cbf_set_realarray_wdims_fs and cbf_set_realarray_wdims_sf variants 
++        allow the data header values of byteorder, dimfast, dimmid, dimslow 
++        and padding to be set to the data byte order, the fastest, second 
++        fastest and third fastest array dimensions and the size in byte of 
++        the post data padding to be used.
++        The array will be compressed using the compression scheme specifed by 
++        compression. Currently, the available schemes are:
++        CBF_CANONICAL     Canonical-code compression (section 3.3.1) 
++        CBF_PACKED        CCP4-style packing (section 3.3.2) CBF_PACKED_V2    
++         CCP4-style packing, version 2 (section 3.3.2) CBF_BYTE_OFFSET   
++        Simple  "byte_offset " compression. CBF_NONE          No 
++        compression. NOTE: This scheme is by far the slowest of the four and 
++        uses much more disk space. It is intended for routine use with small 
++        arrays only. With large arrays (like images) it should be used only 
++        for debugging.
++        The values compressed are limited to 64 bits. If any element in the 
++        array is larger than 64 bits, the value compressed is the nearest 
++        64-bit value.
++        Currently, the source array must consist of chars, shorts or ints 
++        (signed or unsigned), for cbf_set_integerarray, or IEEE doubles or 
++        floats for cbf_set_realarray. If elsize is not equal to sizeof 
++        (char), sizeof (short) or sizeof (int), the function returns 
++        CBF_ARGUMENT.
++        ARGUMENTS
++        handle        CBF handle. compression   Compression method to use. 
++        binary_id     Integer binary identifier. array         Pointer to the 
++        source array. elsize        Size in bytes of each source array 
++        element. elsigned      Set to non-0 if the source array elements are 
++        signed. elements: The number of elements in the array.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_set_integerarray_wdims(self, *args)
++
++    def set_integration_time(self, *args):
++        """
++        Returns : 
++        *args   : Float time
++
++        C prototype: int cbf_set_integration_time (cbf_handle handle,
++                         unsigned int reserved,      double time);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_integration_time sets the integration time in seconds to the 
++        value specified by time. The parameter reserved is presently unused 
++        and should be set to 0.
++        ARGUMENTS
++        handle             CBF handle. reserved           Unused. Any value 
++        other than 0 is invalid. time Integration   time in seconds.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_integration_time(self, *args)
++
++    def set_axis_setting(self, *args):
++        """
++        Returns : 
++        *args   : String axis_id,Float start,Float increment
++
++        C prototype: int cbf_set_axis_setting (cbf_handle handle,
++                         unsigned int reserved,      const char *axis_id, double start,
++                         double increment);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_axis_setting sets the starting and increment values of the 
++        axis axis_id to start and increment.
++        The parameter reserved is presently unused and should be set to 0.
++        ARGUMENTS
++        handle      CBF handle. reserved    Unused. Any value other than 0 is 
++        invalid. axis_id     Axis id. start       Start value. increment   
++        Increment value.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_axis_setting(self, *args)
++
++    def get_real_image_as_string(self, *args):
++        """
++        Returns : (Binary)String
++        *args   : int element_number,int elsize,int ndimslow,int ndimfast
++
++        C prototype: int cbf_get_real_image (cbf_handle handle, unsigned int reserved,
++                              unsigned int element_number, void *array, size_t elsize,
++                         size_t      ndimslow, size_t ndimfast);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_image, cbf_get_image_fs and cbf_get_image_sf read the image 
++        array for element number element_number into an array. The array 
++        consists of ndimslow *ndimfast elements of elsize bytes each, 
++        starting at array. The elements are signed if elsign is non-0 and 
++        unsigned otherwise. cbf_get_real_image, cbf_get_real_image_fs and 
++        cbf_get_real_image_sf read the image array of IEEE doubles or floats 
++        for element number element_number into an array. A real array is 
++        always signed. cbf_get_3d_image, cbf_get_3d_image_fs and 
++        cbf_get_3d_image_sf read the 3D image array for element number 
++        element_number into an array. The array consists of ndimslow *ndimmid 
++        *ndimfast elements of elsize bytes each, starting at array. The 
++        elements are signed if elsign is non-0 and unsigned otherwise. 
++        cbf_get_real_3d_image, cbf_get_real_3d_image_fs, 
++        cbf_get_real_3d_image_sf reads the 3D image array of IEEE doubles or 
++        floats for element number element_number into an array. A real array 
++        is always signed.
++        The _fs calls give the dimensions in a fast-to-slow order. The calls 
++        with no suffix and the calls _sf calls give the dimensions in 
++        slow-to-fast order
++        The structure of the array as a 1-, 2- or 3-dimensional array should 
++        agree with the structure of the array given in the 
++        ARRAY_STRUCTURE_LIST category. If the array is 1-dimensional, 
++        ndimslow should be the array size and ndimfast and, for the 3D calls, 
++        ndimmid, should be set to 1 both in the call and in the imgCIF data 
++        being processed. If the array is 2-dimensional and a 3D call is used, 
++        ndimslow and ndimmid should be the
++
++        """
++        return _pycbf.cbf_handle_struct_get_real_image_as_string(self, *args)
++
++    def get_3d_image_sf_as_string(self, *args):
++        """
++        Returns : (Binary)String
++        *args   : int element_number,int elsize,int elsign,int ndimslow,int ndimmid,
++                  int ndimfast
++
++        C prototype: int cbf_get_3d_image_sf (cbf_handle handle,
++                         unsigned int reserved,      unsigned int element_number,
++                         void *array, size_t elsize, int elsign,      size_t ndimslow,
++                         size_t ndimmid, size_t ndimfast);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_image, cbf_get_image_fs and cbf_get_image_sf read the image 
++        array for element number element_number into an array. The array 
++        consists of ndimslow *ndimfast elements of elsize bytes each, 
++        starting at array. The elements are signed if elsign is non-0 and 
++        unsigned otherwise. cbf_get_real_image, cbf_get_real_image_fs and 
++        cbf_get_real_image_sf read the image array of IEEE doubles or floats 
++        for element number element_number into an array. A real array is 
++        always signed. cbf_get_3d_image, cbf_get_3d_image_fs and 
++        cbf_get_3d_image_sf read the 3D image array for element number 
++        element_number into an array. The array consists of ndimslow *ndimmid 
++        *ndimfast elements of elsize bytes each, starting at array. The 
++        elements are signed if elsign is non-0 and unsigned otherwise. 
++        cbf_get_real_3d_image, cbf_get_real_3d_image_fs, 
++        cbf_get_real_3d_image_sf reads the 3D image array of IEEE doubles or 
++        floats for element number element_number into an array. A real array 
++        is always signed.
++        The _fs calls give the dimensions in a fast-to-slow order. The calls 
++        with no suffix and the calls _sf calls give the dimensions in 
++        slow-to-fast order
++        The structure of the array as a 1-, 2- or 3-dimensional array should 
++        agree with the structure of the array given in the 
++        ARRAY_STRUCTURE_LIST category. If the array is 1-dimensional, 
++        ndimslow should be the array size and ndimfast and, for the 3D calls, 
++        ndimmid, should be set to 1 both in the call and in the imgCIF data 
++        being processed. If the array is 2-dimensional and a 3D call is used, 
++        ndimslow and ndimmid should be the
++
++        """
++        return _pycbf.cbf_handle_struct_get_3d_image_sf_as_string(self, *args)
++
++    def set_real_image_fs(self, *args):
++        """
++        Returns : 
++        *args   : int element_number,int compression,(binary) String data,int elsize,
++                  int dimfast,int dimslow
++
++        C prototype: int cbf_set_real_image_fs(cbf_handle handle,
++                         unsigned int reserved,      unsigned int element_number,
++                         unsigned int compression, void      *array,size_t elsize,
++                         size_t ndimfast, size_t ndimslow);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_image, cbf_set_image_fs and cbf_set_image_sf write the image 
++        array for element number element_number. The array consists of 
++        ndimfast *ndimslow elements of elsize bytes each, starting at array. 
++        The elements are signed if elsign is non-zero and unsigned otherwise. 
++        cbf_set_real_image, cbf_set_real_image_fs and cbf_set_real_image_sf 
++        write the image array for element number element_number. The array 
++        consists of ndimfast *ndimslow IEEE double or float elements of 
++        elsize bytes each, starting at array. cbf_set_3d_image, 
++        cbf_set_3d_image_fs and cbf_set_3d_image_sf write the 3D image array 
++        for element number element_number. The array consists of ndimfast 
++        *ndimmid *ndimslow elements of elsize bytes each, starting at array. 
++        The elements are signed if elsign is non-0 and unsigned otherwise. 
++        cbf_set_real_3d_image, cbf_set_real_3d_image_fs and 
++        cbf_set_real_3d_image_sf writes the 3D image array for element number 
++        element_number. The array consists of ndimfast *ndimmid *ndimslow 
++        IEEE double or float elements of elsize bytes each, starting at 
++        array.
++        The _fs calls give the dimensions in a fast-to-slow order. The calls 
++        with no suffix and the calls _sf calls give the dimensions in 
++        slow-to-fast order
++        If the array is 1-dimensional, ndimslow should be the array size and 
++        ndimfast and, for the 3D calls, ndimmid, should be set to 1. If the 
++        array is 2-dimensional and the 3D calls are used, ndimslow and 
++        ndimmid should be used for the array dimensions and ndimfast should 
++        be set to 1.
++        The array will be compressed using the compression scheme specifed by 
++        compression. Currently, the available schemes are:
++        CBF_CANONICAL   Canonical-code compression (section 3.3.1) CBF_PACKED 
++             CCP4-style packing (section 3.3.2) CBF_PACKED_V2     CCP4-style 
++        packing, version 2 (section 3.3.2) CBF_BYTE_OFFSET   Simple  
++        "byte_offset " compression. CBF_NONE        No compression.
++        The values compressed are limited to 64 bits. If any element in the 
++        array is larger than 64 bits, the value compressed is the nearest 
++        64-bit value.
++        Currently, the source array must consist of chars, shorts or ints 
++        (signed or unsigned)for cbf_set_image, or IEEE doubles or floats for 
++        cbf_set_real_image. If elsize is not equal to sizeof (short), sizeof 
++        (int), sizeof(double) or sizeof(float), the function returns 
++        CBF_ARGUMENT.
++        The parameter reserved is presently unused and should be set to 0.
++        ARGUMENTS
++        handle           CBF handle. reserved         Unused. Any value other 
++        than 0 is invalid. element_number   The number of the detector 
++        element counting from 0 by order of appearance in the  
++        "diffrn_data_frame " category. compression      Compression type. 
++        array            Pointer to the image array. elsize           Size in 
++        bytes of each image array element. elsigned         Set to non-0 if 
++        the image array elements are signed. ndimslow         Slowest array 
++        dimension. ndimmid          Second slowest array dimension. ndimfast  
++               Fastest array dimension.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_real_image_fs(self, *args)
++
++    def get_overload(self, *args):
++        """
++        Returns : Float overload
++        *args   : Integer element_number
++
++        C prototype: int cbf_get_overload (cbf_handle handle,
++                         unsigned int element_number,      double *overload);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_overload sets *overload to the overload value for element 
++        number element_number.
++        ARGUMENTS
++        handle           CBF handle. element_number   The number of the 
++        detector element counting from 0 by order of appearance in the  
++        "diffrn_data_frame " category. overload         Pointer to the 
++        destination overload.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_get_overload(self, *args)
++
++    def get_wavelength(self, *args):
++        """
++        Returns : double
++        *args   : 
++
++        C prototype: int cbf_get_wavelength (cbf_handle handle, double *wavelength);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_wavelength sets *wavelength to the current wavelength in AA.
++        ARGUMENTS
++        handle       CBF handle. wavelength   Pointer to the destination.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_get_wavelength(self, *args)
++
++    def next_datablock(self, *args):
++        """
++        Returns : 
++        *args   : 
++
++        C prototype: int cbf_next_datablock (cbf_handle handle);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_next_datablock makes the data block following the current data 
++        block the current data block.
++        If there are no more data blocks, the function returns CBF_NOTFOUND.
++        The current category becomes undefined.
++        ARGUMENTS
++        handle   CBF handle.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_next_datablock(self, *args)
++
++    def get_realarrayparameters_wdims(self):
++        """
++        Returns : int compression,int binary_id,int elsize,int elements,char **bo,
++                  int *bolen,int dimfast,int dimmid,int dimslow,int padding
++        *args   : 
++
++        C prototype: int cbf_get_realarrayparameters_wdims (cbf_handle handle,
++                         unsigned int    *compression, int *binary_id, size_t *elsize,
++                         size_t *elements, const char    **byteorder, size_t *dimfast,
++                         size_t *dimmid, size_t *dimslow, size_t    *padding);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_integerarrayparameters sets *compression, *binary_id, 
++        *elsize, *elsigned, *elunsigned, *elements, *minelement and 
++        *maxelement to values read from the binary value of the item at the 
++        current column and row. This provides all the arguments needed for a 
++        subsequent call to cbf_set_integerarray, if a copy of the array is to 
++        be made into another CIF or CBF. cbf_get_realarrayparameters sets 
++        *compression, *binary_id, *elsize, *elements to values read from the 
++        binary value of the item at the current column and row. This provides 
++        all the arguments needed for a subsequent call to cbf_set_realarray, 
++        if a copy of the arry is to be made into another CIF or CBF.
++        The variants cbf_get_integerarrayparameters_wdims, 
++        cbf_get_integerarrayparameters_wdims_fs, 
++        cbf_get_integerarrayparameters_wdims_sf, 
++        cbf_get_realarrayparameters_wdims, 
++        cbf_get_realarrayparameters_wdims_fs, 
++        cbf_get_realarrayparameters_wdims_sf set **byteorder, *dimfast, 
++        *dimmid, *dimslow, and *padding as well, providing the additional 
++        parameters needed for a subsequent call to cbf_set_integerarray_wdims 
++        or cbf_set_realarray_wdims.
++        The value returned in *byteorder is a pointer either to the string  
++        "little_endian " or to the string  "big_endian ". This should be 
++        the byte order of the data, not necessarily of the host machine. No 
++        attempt should be made to modify this string. At this time only  
++        "little_endian " will be returned.
++        The values returned in *dimfast, *dimmid and *dimslow are the sizes 
++        of the fastest changing, second fastest changing and third fastest 
++        changing dimensions of the array, if specified, or zero, if not 
++        specified.
++        The value returned in *padding is the size of the post-data padding, 
++        if any and if specified in the data header. The value is given as a 
++        count of octets.
++        If the value is not binary, the function returns CBF_ASCII.
++        ARGUMENTS
++        handle        CBF handle. compression   Compression method used. 
++        elsize        Size in bytes of each array element. binary_id     
++        Pointer to the destination integer binary identifier. elsigned      
++        Pointer to an integer. Set to 1 if the elements can be read as signed 
++        integers. elunsigned    Pointer to an integer. Set to 1 if the 
++        elements can be read as unsigned integers. elements      Pointer to 
++        the destination number of elements. minelement    Pointer to the 
++        destination smallest element. maxelement    Pointer to the 
++        destination largest element. byteorder     Pointer to the destination 
++        byte order. dimfast       Pointer to the destination fastest 
++        dimension. dimmid        Pointer to the destination second fastest 
++        dimension. dimslow       Pointer to the destination third fastest 
++        dimension. padding       Pointer to the destination padding size.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_get_realarrayparameters_wdims(self)
++
++    def set_orientation_matrix(self, *args):
++        """
++        Returns : 
++        *args   : Float matrix_0,Float matrix_1,Float matrix_2,Float matrix_3,
++                  Float matrix_4,Float matrix_5,Float matrix_6,Float matrix_7,
++                  Float matrix_8
++
++        C prototype: int cbf_set_orientation_matrix (cbf_handle handle,
++                         double ub_matrix[9]);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_orientation_matrix sets ub_matrix to point to the array of 
++        orientation matrix entries in the  "diffrn " category in the order 
++        of columns:
++         "UB[1][1] "  "UB[1][2] "  "UB[1][3] "  "UB[2][1] "  
++        "UB[2][2] "  "UB[2][3] "  "UB[3][1] "  "UB[3][2] "  
++        "UB[3][3] "
++        cbf_set_orientation_matrix sets the values in the  "diffrn " 
++        category to the values pointed to by ub_matrix.
++        ARGUMENTS
++        handle     CBF handle. ubmatric   Source or destination array of 9 
++        doubles giving the orientation matrix parameters.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_orientation_matrix(self, *args)
++
++    def new_category(self, *args):
++        """
++        Returns : string
++        *args   : 
++
++        C prototype: int cbf_new_category (cbf_handle handle,
++                         const char *categoryname);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_new_category creates a new category in the current data block 
++        with name categoryname and makes it the current category.
++        If a category with this name already exists, the existing category 
++        becomes the current category.
++        ARGUMENTS
++        handle         CBF handle. categoryname   The name of the new 
++        category.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_new_category(self, *args)
++
++    def set_gain(self, *args):
++        """
++        Returns : 
++        *args   : Float gain,Float gain_esd
++
++        C prototype: int cbf_set_gain (cbf_handle handle, unsigned int element_number,
++                         double      gain, double gain_esd);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_gain sets the gain of element number element_number to the 
++        values specified by gain and gain_esd.
++        ARGUMENTS
++        handle           CBF handle. element_number   The number of the 
++        detector element counting from 0 by order of appearance in the  
++        "diffrn_data_frame " category. gain             New gain value. 
++        gain_esd         New gain_esd value.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_gain(self, *args)
++
++    def find_column(self, *args):
++        """
++        Returns : string
++        *args   : 
++
++        C prototype: int cbf_find_column (cbf_handle handle, const char *columnname);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_find_column makes the columns in the current category with name 
++        columnname the current column.
++        The comparison is case-insensitive.
++        If the column does not exist, the function returns CBF_NOTFOUND.
++        The current row is not affected.
++        ARGUMENTS
++        handle       CBF handle. columnname   The name of column to find.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_find_column(self, *args)
++
++    def remove_category(self, *args):
++        """
++        Returns : 
++        *args   : 
++
++        C prototype: int cbf_remove_category (cbf_handle handle);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_remove_category deletes the current category.
++        The current category becomes undefined.
++        ARGUMENTS
++        handle   CBF handle.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_remove_category(self, *args)
++
++    def get_integerarrayparameters_wdims_sf(self):
++        """
++        Returns : int compression,int binary_id,int elsize,int elsigned,int elunsigned,
++                  int elements,int minelement,int maxelement,char **bo,int *bolen,
++                  int dimslow,int dimmid,int dimfast,int padding
++        *args   : 
++
++        C prototype: int cbf_get_integerarrayparameters_wdims_sf (cbf_handle handle,
++                         unsigned    int *compression, int *binary_id, size_t *elsize,
++                         int *elsigned, int    *elunsigned, size_t *elements,
++                         int *minelement, int *maxelement, const    char **byteorder,
++                         size_t *dimslow, size_t *dimmid, size_t *dimfast,
++                         size_t    *padding);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_integerarrayparameters sets *compression, *binary_id, 
++        *elsize, *elsigned, *elunsigned, *elements, *minelement and 
++        *maxelement to values read from the binary value of the item at the 
++        current column and row. This provides all the arguments needed for a 
++        subsequent call to cbf_set_integerarray, if a copy of the array is to 
++        be made into another CIF or CBF. cbf_get_realarrayparameters sets 
++        *compression, *binary_id, *elsize, *elements to values read from the 
++        binary value of the item at the current column and row. This provides 
++        all the arguments needed for a subsequent call to cbf_set_realarray, 
++        if a copy of the arry is to be made into another CIF or CBF.
++        The variants cbf_get_integerarrayparameters_wdims, 
++        cbf_get_integerarrayparameters_wdims_fs, 
++        cbf_get_integerarrayparameters_wdims_sf, 
++        cbf_get_realarrayparameters_wdims, 
++        cbf_get_realarrayparameters_wdims_fs, 
++        cbf_get_realarrayparameters_wdims_sf set **byteorder, *dimfast, 
++        *dimmid, *dimslow, and *padding as well, providing the additional 
++        parameters needed for a subsequent call to cbf_set_integerarray_wdims 
++        or cbf_set_realarray_wdims.
++        The value returned in *byteorder is a pointer either to the string  
++        "little_endian " or to the string  "big_endian ". This should be 
++        the byte order of the data, not necessarily of the host machine. No 
++        attempt should be made to modify this string. At this time only  
++        "little_endian " will be returned.
++        The values returned in *dimfast, *dimmid and *dimslow are the sizes 
++        of the fastest changing, second fastest changing and third fastest 
++        changing dimensions of the array, if specified, or zero, if not 
++        specified.
++        The value returned in *padding is the size of the post-data padding, 
++        if any and if specified in the data header. The value is given as a 
++        count of octets.
++        If the value is not binary, the function returns CBF_ASCII.
++        ARGUMENTS
++        handle        CBF handle. compression   Compression method used. 
++        elsize        Size in bytes of each array element. binary_id     
++        Pointer to the destination integer binary identifier. elsigned      
++        Pointer to an integer. Set to 1 if the elements can be read as signed 
++        integers. elunsigned    Pointer to an integer. Set to 1 if the 
++        elements can be read as unsigned integers. elements      Pointer to 
++        the destination number of elements. minelement    Pointer to the 
++        destination smallest element. maxelement    Pointer to the 
++        destination largest element. byteorder     Pointer to the destination 
++        byte order. dimfast       Pointer to the destination fastest 
++        dimension. dimmid        Pointer to the destination second fastest 
++        dimension. dimslow       Pointer to the destination third fastest 
++        dimension. padding       Pointer to the destination padding size.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_get_integerarrayparameters_wdims_sf(self)
++
++    def get_pixel_size(self, *args):
++        """
++        Returns : Float pixel_size
++        *args   : Int element_number,Int axis_number
++
++        C prototype: int cbf_get_pixel_size (cbf_handle handle,
++                         unsigned int element_number,      int axis_number,
++                         double *psize);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_pixel_size and cbf_get_pixel_size_sf set *psize to point to 
++        the double value in millimeters of the axis axis_number of the 
++        detector element element_number. The axis_number is numbered from 1, 
++        starting with the slowest axis. cbf_get_pixel_size_fs sets *psize to 
++        point to the double value in millimeters of the axis axis_number of 
++        the detector element element_number. The axis_number is numbered from 
++        1, starting with the fastest axis.
++        If a negative axis number is given, the order of axes is reversed, so 
++        that -1 specifies the slowest axis for cbf_get_pixel_size_fs and the 
++        fastest axis for cbf_get_pixel_size_sf.
++        If the pixel size is not given explcitly in the  "array_element_size 
++        " category, the function returns CBF_NOTFOUND.
++        ARGUMENTS
++        handle           CBF handle. element_number   The number of the 
++        detector element counting from 0 by order of appearance in the  
++        "diffrn_data_frame " category. axis_number      The number of the 
++        axis, starting from 1 for the fastest for cbf_get_pixel_size and 
++        cbf_get_pixel_size_fs and the slowest for cbf_get_pixel_size_sf. 
++        psize            Pointer to the destination pixel size.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_get_pixel_size(self, *args)
++
++    def set_real_image_sf(self, *args):
++        """
++        Returns : 
++        *args   : int element_number,int compression,(binary) String data,int elsize,
++                  int dimslow,int dimfast
++
++        C prototype: int cbf_set_real_image_sf(cbf_handle handle,
++                         unsigned int reserved,      unsigned int element_number,
++                         unsigned int compression, void      *array,size_t elsize,
++                         size_t ndimslow, size_t ndimfast);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_image, cbf_set_image_fs and cbf_set_image_sf write the image 
++        array for element number element_number. The array consists of 
++        ndimfast *ndimslow elements of elsize bytes each, starting at array. 
++        The elements are signed if elsign is non-zero and unsigned otherwise. 
++        cbf_set_real_image, cbf_set_real_image_fs and cbf_set_real_image_sf 
++        write the image array for element number element_number. The array 
++        consists of ndimfast *ndimslow IEEE double or float elements of 
++        elsize bytes each, starting at array. cbf_set_3d_image, 
++        cbf_set_3d_image_fs and cbf_set_3d_image_sf write the 3D image array 
++        for element number element_number. The array consists of ndimfast 
++        *ndimmid *ndimslow elements of elsize bytes each, starting at array. 
++        The elements are signed if elsign is non-0 and unsigned otherwise. 
++        cbf_set_real_3d_image, cbf_set_real_3d_image_fs and 
++        cbf_set_real_3d_image_sf writes the 3D image array for element number 
++        element_number. The array consists of ndimfast *ndimmid *ndimslow 
++        IEEE double or float elements of elsize bytes each, starting at 
++        array.
++        The _fs calls give the dimensions in a fast-to-slow order. The calls 
++        with no suffix and the calls _sf calls give the dimensions in 
++        slow-to-fast order
++        If the array is 1-dimensional, ndimslow should be the array size and 
++        ndimfast and, for the 3D calls, ndimmid, should be set to 1. If the 
++        array is 2-dimensional and the 3D calls are used, ndimslow and 
++        ndimmid should be used for the array dimensions and ndimfast should 
++        be set to 1.
++        The array will be compressed using the compression scheme specifed by 
++        compression. Currently, the available schemes are:
++        CBF_CANONICAL   Canonical-code compression (section 3.3.1) CBF_PACKED 
++             CCP4-style packing (section 3.3.2) CBF_PACKED_V2     CCP4-style 
++        packing, version 2 (section 3.3.2) CBF_BYTE_OFFSET   Simple  
++        "byte_offset " compression. CBF_NONE        No compression.
++        The values compressed are limited to 64 bits. If any element in the 
++        array is larger than 64 bits, the value compressed is the nearest 
++        64-bit value.
++        Currently, the source array must consist of chars, shorts or ints 
++        (signed or unsigned)for cbf_set_image, or IEEE doubles or floats for 
++        cbf_set_real_image. If elsize is not equal to sizeof (short), sizeof 
++        (int), sizeof(double) or sizeof(float), the function returns 
++        CBF_ARGUMENT.
++        The parameter reserved is presently unused and should be set to 0.
++        ARGUMENTS
++        handle           CBF handle. reserved         Unused. Any value other 
++        than 0 is invalid. element_number   The number of the detector 
++        element counting from 0 by order of appearance in the  
++        "diffrn_data_frame " category. compression      Compression type. 
++        array            Pointer to the image array. elsize           Size in 
++        bytes of each image array element. elsigned         Set to non-0 if 
++        the image array elements are signed. ndimslow         Slowest array 
++        dimension. ndimmid          Second slowest array dimension. ndimfast  
++               Fastest array dimension.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_real_image_sf(self, *args)
++
++    def require_category(self, *args):
++        """
++        Returns : string
++        *args   : 
++
++        C prototype: int cbf_require_category (cbf_handle handle,
++                         const char *categoryname);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_rewuire_category makes the category in the current data block 
++        with name categoryname the current category, if it exists, or creates 
++        the catagory if it does not exist.
++        The comparison is case-insensitive.
++        The current column and row become undefined.
++        ARGUMENTS
++        handle         CBF handle. categoryname   The name of the category to 
++        find.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_require_category(self, *args)
++
++    def get_reciprocal_cell(self):
++        """
++        Returns : Float astar,Float bstar,Float cstar,Float alphastar,Float betastar,
++                  Float gammastar
++        *args   : 
++
++        C prototype: int cbf_get_reciprocal_cell (cbf_handle handle, double cell[6],
++                         double      cell_esd[6] );
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_reciprocal_cell sets cell[0:2] to the double values of the 
++        reciprocal cell edge lengths a*, b* and c* in AAngstroms-1, cell[3:5] 
++        to the double values of the reciprocal cell angles a*, b* and g* in 
++        degrees, cell_esd[0:2] to the double values of the estimated 
++        strandard deviations of the reciprocal cell edge lengths a*, b* and 
++        c* in AAngstroms-1, cell_esd[3:5] to the double values of the 
++        estimated standard deviations of the the reciprocal cell angles a*, 
++        b* and g* in degrees.
++        The values returned are retrieved from the first row of the  "cell 
++        " category. The value of  "_cell.entry_id " is ignored.
++        cell or cell_esd may be NULL.
++        If cell is NULL, the reciprocal cell parameters are not retrieved.
++        If cell_esd is NULL, the reciprocal cell parameter esds are not 
++        retrieved.
++        If the  "cell " category is present, but some of the values are 
++        missing, zeros are returned for the missing values.
++        ARGUMENTS
++        handle     CBF handle. cell       Pointer to the destination array of 
++        6 doubles for the reciprocal cell parameters. cell_esd   Pointer to 
++        the destination array of 6 doubles for the reciprocal cell parameter 
++        esds.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success. No errors is 
++        returned for missing values if the  "cell " category exists.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_get_reciprocal_cell(self)
++
++    def get_reciprocal_cell_esd(self):
++        """get_reciprocal_cell_esd(self)"""
++        return _pycbf.cbf_handle_struct_get_reciprocal_cell_esd(self)
++
++    def get_3d_image_size(self, *args):
++        """
++        Returns : size_t ndimslow,size_t ndimmid,size_t ndimfast
++        *args   : Integer element_number
++
++        C prototype: int cbf_get_3d_image_size (cbf_handle handle,
++                         unsigned int reserved,      unsigned int element_number,
++                         size_t *ndimslow, size_t *ndimmid, size_t      *ndimfast);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_image_size, cbf_get_image_size_fs and cbf_get_image_size_sf 
++        set *ndimslow and *ndimfast to the slow and fast dimensions of the 
++        image array for element number element_number. If the array is 
++        1-dimensional, *ndimslow will be set to the array size and *ndimfast 
++        will be set to 1. If the array is 3-dimensional an error code will be 
++        returned. cbf_get_3d_image_size, cbf_get_3d_image_size_fs and 
++        cbf_get_3d_image_size_sf set *ndimslow, *ndimmid and *ndimfast to the 
++        slowest, next fastest and fastest dimensions, respectively, of the 3D 
++        image array for element number element_number. If the array is 
++        1-dimensional, *ndimslow will be set to the array size and *ndimmid 
++        and
++
++        """
++        return _pycbf.cbf_handle_struct_get_3d_image_size(self, *args)
++
++    def find_tag_root(self, *args):
++        """
++        Returns : String tagroot
++        *args   : String tagname
++
++        C prototype: int cbf_find_tag_root (cbf_handle handle, const char* tagname,
++                         const      char** tagroot);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_find_tag_root sets *tagroot to the root tag of which tagname is 
++        an alias. cbf_set_tag_root sets tagname as an alias of tagroot_in in 
++        the dictionary associated with handle, creating the dictionary if 
++        necessary. cbf_require_tag_root sets *tagroot to the root tag of 
++        which tagname is an alias, if there is one, or to the value of 
++        tagname, if tagname is not an alias.
++        A returned tagroot string must not be modified in any way.
++        ARGUMENTS
++        handle       CBF handle. tagname      tag name which may be an alias. 
++        tagroot      pointer to a returned tag root name. tagroot_in   input 
++        tag root name.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_find_tag_root(self, *args)
++
++    def require_category_root(self, *args):
++        """require_category_root(self, char categoryname) -> char"""
++        return _pycbf.cbf_handle_struct_require_category_root(self, *args)
++
++    def set_realarray_wdims_sf(self, *args):
++        """
++        Returns : 
++        *args   : int compression,int binary_id,(binary) String data,int elsize,
++                  int elements,String byteorder,int dimslow,int dimmid,int dimfast,
++                  int padding
++
++        C prototype: int cbf_set_realarray_wdims_sf (cbf_handle handle,
++                         unsigned int    compression, int binary_id, void *array,
++                         size_t elsize, size_t elements,    const char *byteorder,
++                         size_t dimslow, size_t dimmid, size_t dimfast,
++                            size_t padding);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_integerarray sets the binary value of the item at the current 
++        column and row to an integer array. The array consists of elements 
++        elements of elsize bytes each, starting at array. The elements are 
++        signed if elsigned is non-0 and unsigned otherwise. binary_id is the 
++        binary section identifier. cbf_set_realarray sets the binary value of 
++        the item at the current column and row to an integer array. The array 
++        consists of elements elements of elsize bytes each, starting at 
++        array. binary_id is the binary section identifier.
++        The cbf_set_integerarray_wdims, cbf_set_integerarray_wdims_fs, 
++        cbf_set_integerarray_wdims_sf, cbf_set_realarray_wdims, 
++        cbf_set_realarray_wdims_fs and cbf_set_realarray_wdims_sf variants 
++        allow the data header values of byteorder, dimfast, dimmid, dimslow 
++        and padding to be set to the data byte order, the fastest, second 
++        fastest and third fastest array dimensions and the size in byte of 
++        the post data padding to be used.
++        The array will be compressed using the compression scheme specifed by 
++        compression. Currently, the available schemes are:
++        CBF_CANONICAL     Canonical-code compression (section 3.3.1) 
++        CBF_PACKED        CCP4-style packing (section 3.3.2) CBF_PACKED_V2    
++         CCP4-style packing, version 2 (section 3.3.2) CBF_BYTE_OFFSET   
++        Simple  "byte_offset " compression. CBF_NONE          No 
++        compression. NOTE: This scheme is by far the slowest of the four and 
++        uses much more disk space. It is intended for routine use with small 
++        arrays only. With large arrays (like images) it should be used only 
++        for debugging.
++        The values compressed are limited to 64 bits. If any element in the 
++        array is larger than 64 bits, the value compressed is the nearest 
++        64-bit value.
++        Currently, the source array must consist of chars, shorts or ints 
++        (signed or unsigned), for cbf_set_integerarray, or IEEE doubles or 
++        floats for cbf_set_realarray. If elsize is not equal to sizeof 
++        (char), sizeof (short) or sizeof (int), the function returns 
++        CBF_ARGUMENT.
++        ARGUMENTS
++        handle        CBF handle. compression   Compression method to use. 
++        binary_id     Integer binary identifier. array         Pointer to the 
++        source array. elsize        Size in bytes of each source array 
++        element. elsigned      Set to non-0 if the source array elements are 
++        signed. elements: The number of elements in the array.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_set_realarray_wdims_sf(self, *args)
++
++    def set_integervalue(self, *args):
++        """
++        Returns : int number
++        *args   : 
++
++        C prototype: int cbf_set_integervalue (cbf_handle handle, int number);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_integervalue sets the item at the current column and row to 
++        the integer value number written as a decimal ASCII string.
++        ARGUMENTS
++        handle   CBF handle. number   Integer value.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_set_integervalue(self, *args)
++
++    def category_name(self, *args):
++        """
++        Returns : 
++        *args   : string
++
++        C prototype: int cbf_category_name (cbf_handle handle,
++                         const char **categoryname);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_category_name sets *categoryname to point to the name of the 
++        current category of the current data block.
++        The category name will be valid as long as the category exists.
++        The name must not be modified by the program in any way.
++        ARGUMENTS
++        handle         CBF handle. categoryname   Pointer to the destination 
++        category name pointer.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_category_name(self, *args)
++
++    def get_typeofvalue(self, *args):
++        """
++        Returns : 
++        *args   : string
++
++        C prototype: int cbf_get_typeofvalue (cbf_handle handle,
++                         const char **typeofvalue);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_value sets *typeofvalue to point an ASCII descriptor of the 
++        value of the item at the current column and row. The strings that may 
++        be returned are:
++         "null " for a null value indicated by a  ". " or a  "? "  
++        "bnry " for a binary value  "word " for an unquoted string  
++        "dblq " for a double-quoted string  "sglq " for a single-quoted 
++        string  "text " for a semicolon-quoted string (multiline text 
++        field)  "prns " for a parenthesis-bracketed string (multiline text 
++        field)  "brcs " for a brace-bracketed string (multiline text field) 
++         "bkts " for a square-bracket-bracketed string (multiline text 
++        field)  "tsqs " for a treble-single-quote quoted string (multiline 
++        text field)  "tdqs " for a treble-double-quote quoted string 
++        (multiline text field)
++        Not all types are valid for all type of CIF files. In partcular the 
++        types  "prns ",  "brcs ",  "bkts " were introduced with DDLm 
++        and are not valid in DDL1 or DDL2 CIFS. The types  "tsqs " and  
++        "tdqs " are not formally part of the CIF syntax. A field for which 
++        no value has been set sets *typeofvalue to NULL rather than to the 
++        string  "null ".
++        The typeofvalue must not be modified by the program in any way.
++        ARGUMENTS
++        handle        CBF handle. typeofvalue   Pointer to the destination 
++        type-of-value string pointer.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_get_typeofvalue(self, *args)
++
++    def set_real_image(self, *args):
++        """
++        Returns : 
++        *args   : int element_number,int compression,(binary) String data,int elsize,
++                  int dimslow,int dimfast
++
++        C prototype: int cbf_set_real_image (cbf_handle handle, unsigned int reserved,
++                              unsigned int element_number, unsigned int compression,
++                         void      *array,size_t elsize, size_t ndimslow,
++                         size_t ndimfast);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_image, cbf_set_image_fs and cbf_set_image_sf write the image 
++        array for element number element_number. The array consists of 
++        ndimfast *ndimslow elements of elsize bytes each, starting at array. 
++        The elements are signed if elsign is non-zero and unsigned otherwise. 
++        cbf_set_real_image, cbf_set_real_image_fs and cbf_set_real_image_sf 
++        write the image array for element number element_number. The array 
++        consists of ndimfast *ndimslow IEEE double or float elements of 
++        elsize bytes each, starting at array. cbf_set_3d_image, 
++        cbf_set_3d_image_fs and cbf_set_3d_image_sf write the 3D image array 
++        for element number element_number. The array consists of ndimfast 
++        *ndimmid *ndimslow elements of elsize bytes each, starting at array. 
++        The elements are signed if elsign is non-0 and unsigned otherwise. 
++        cbf_set_real_3d_image, cbf_set_real_3d_image_fs and 
++        cbf_set_real_3d_image_sf writes the 3D image array for element number 
++        element_number. The array consists of ndimfast *ndimmid *ndimslow 
++        IEEE double or float elements of elsize bytes each, starting at 
++        array.
++        The _fs calls give the dimensions in a fast-to-slow order. The calls 
++        with no suffix and the calls _sf calls give the dimensions in 
++        slow-to-fast order
++        If the array is 1-dimensional, ndimslow should be the array size and 
++        ndimfast and, for the 3D calls, ndimmid, should be set to 1. If the 
++        array is 2-dimensional and the 3D calls are used, ndimslow and 
++        ndimmid should be used for the array dimensions and ndimfast should 
++        be set to 1.
++        The array will be compressed using the compression scheme specifed by 
++        compression. Currently, the available schemes are:
++        CBF_CANONICAL   Canonical-code compression (section 3.3.1) CBF_PACKED 
++             CCP4-style packing (section 3.3.2) CBF_PACKED_V2     CCP4-style 
++        packing, version 2 (section 3.3.2) CBF_BYTE_OFFSET   Simple  
++        "byte_offset " compression. CBF_NONE        No compression.
++        The values compressed are limited to 64 bits. If any element in the 
++        array is larger than 64 bits, the value compressed is the nearest 
++        64-bit value.
++        Currently, the source array must consist of chars, shorts or ints 
++        (signed or unsigned)for cbf_set_image, or IEEE doubles or floats for 
++        cbf_set_real_image. If elsize is not equal to sizeof (short), sizeof 
++        (int), sizeof(double) or sizeof(float), the function returns 
++        CBF_ARGUMENT.
++        The parameter reserved is presently unused and should be set to 0.
++        ARGUMENTS
++        handle           CBF handle. reserved         Unused. Any value other 
++        than 0 is invalid. element_number   The number of the detector 
++        element counting from 0 by order of appearance in the  
++        "diffrn_data_frame " category. compression      Compression type. 
++        array            Pointer to the image array. elsize           Size in 
++        bytes of each image array element. elsigned         Set to non-0 if 
++        the image array elements are signed. ndimslow         Slowest array 
++        dimension. ndimmid          Second slowest array dimension. ndimfast  
++               Fastest array dimension.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_real_image(self, *args)
++
++    def get_3d_image_as_string(self, *args):
++        """
++        Returns : (Binary)String
++        *args   : int element_number,int elsize,int elsign,int ndimslow,int ndimmid,
++                  int ndimfast
++
++        C prototype: int cbf_get_3d_image (cbf_handle handle, unsigned int reserved,
++                         unsigned      int element_number, void *array, size_t elsize,
++                         int elsign, size_t      ndimslow, size_t ndimmid,
++                         size_t ndimfast);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_image, cbf_get_image_fs and cbf_get_image_sf read the image 
++        array for element number element_number into an array. The array 
++        consists of ndimslow *ndimfast elements of elsize bytes each, 
++        starting at array. The elements are signed if elsign is non-0 and 
++        unsigned otherwise. cbf_get_real_image, cbf_get_real_image_fs and 
++        cbf_get_real_image_sf read the image array of IEEE doubles or floats 
++        for element number element_number into an array. A real array is 
++        always signed. cbf_get_3d_image, cbf_get_3d_image_fs and 
++        cbf_get_3d_image_sf read the 3D image array for element number 
++        element_number into an array. The array consists of ndimslow *ndimmid 
++        *ndimfast elements of elsize bytes each, starting at array. The 
++        elements are signed if elsign is non-0 and unsigned otherwise. 
++        cbf_get_real_3d_image, cbf_get_real_3d_image_fs, 
++        cbf_get_real_3d_image_sf reads the 3D image array of IEEE doubles or 
++        floats for element number element_number into an array. A real array 
++        is always signed.
++        The _fs calls give the dimensions in a fast-to-slow order. The calls 
++        with no suffix and the calls _sf calls give the dimensions in 
++        slow-to-fast order
++        The structure of the array as a 1-, 2- or 3-dimensional array should 
++        agree with the structure of the array given in the 
++        ARRAY_STRUCTURE_LIST category. If the array is 1-dimensional, 
++        ndimslow should be the array size and ndimfast and, for the 3D calls, 
++        ndimmid, should be set to 1 both in the call and in the imgCIF data 
++        being processed. If the array is 2-dimensional and a 3D call is used, 
++        ndimslow and ndimmid should be the
++
++        """
++        return _pycbf.cbf_handle_struct_get_3d_image_as_string(self, *args)
++
++    def remove_row(self, *args):
++        """
++        Returns : 
++        *args   : 
++
++        C prototype: int cbf_remove_row (cbf_handle handle);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_remove_row deletes the current row in the current category.
++        If the current row was the last row, it will move down by 1, 
++        otherwise, it will remain the same.
++        ARGUMENTS
++        handle   CBF handle.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_remove_row(self, *args)
++
++    def set_overload(self, *args):
++        """
++        Returns : 
++        *args   : Integer element_number,Float overload
++
++        C prototype: int cbf_set_overload (cbf_handle handle,
++                         unsigned int element_number,      double overload);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_overload sets the overload value of element number 
++        element_number to overload.
++        ARGUMENTS
++        handle           CBF handle. element_number   The number of the 
++        detector element counting from 0 by order of appearance in the  
++        "diffrn_data_frame " category. overload         New overload value.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_overload(self, *args)
++
++    def get_image_size(self, *args):
++        """
++        Returns : size_t ndim1,size_t ndim2
++        *args   : Integer element_number
++
++        C prototype: int cbf_get_image_size (cbf_handle handle, unsigned int reserved,
++                              unsigned int element_number, size_t *ndimslow,
++                         size_t *ndimfast);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_image_size, cbf_get_image_size_fs and cbf_get_image_size_sf 
++        set *ndimslow and *ndimfast to the slow and fast dimensions of the 
++        image array for element number element_number. If the array is 
++        1-dimensional, *ndimslow will be set to the array size and *ndimfast 
++        will be set to 1. If the array is 3-dimensional an error code will be 
++        returned. cbf_get_3d_image_size, cbf_get_3d_image_size_fs and 
++        cbf_get_3d_image_size_sf set *ndimslow, *ndimmid and *ndimfast to the 
++        slowest, next fastest and fastest dimensions, respectively, of the 3D 
++        image array for element number element_number. If the array is 
++        1-dimensional, *ndimslow will be set to the array size and *ndimmid 
++        and
++
++        """
++        return _pycbf.cbf_handle_struct_get_image_size(self, *args)
++
++    def set_3d_image_sf(self, *args):
++        """
++        Returns : 
++        *args   : int element_number,int compression,(binary) String data,int elsize,
++                  int elsign,int dimslow,int dimmid,int dimfast
++
++        C prototype: int cbf_set_3d_image_sf(cbf_handle handle, unsigned int reserved,
++                              unsigned int element_number, unsigned int compression,
++                         void *array,      size_t elsize, int elsign, size_t ndimslow,
++                         size_t ndimmid, size_t      ndimfast);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_image, cbf_set_image_fs and cbf_set_image_sf write the image 
++        array for element number element_number. The array consists of 
++        ndimfast *ndimslow elements of elsize bytes each, starting at array. 
++        The elements are signed if elsign is non-zero and unsigned otherwise. 
++        cbf_set_real_image, cbf_set_real_image_fs and cbf_set_real_image_sf 
++        write the image array for element number element_number. The array 
++        consists of ndimfast *ndimslow IEEE double or float elements of 
++        elsize bytes each, starting at array. cbf_set_3d_image, 
++        cbf_set_3d_image_fs and cbf_set_3d_image_sf write the 3D image array 
++        for element number element_number. The array consists of ndimfast 
++        *ndimmid *ndimslow elements of elsize bytes each, starting at array. 
++        The elements are signed if elsign is non-0 and unsigned otherwise. 
++        cbf_set_real_3d_image, cbf_set_real_3d_image_fs and 
++        cbf_set_real_3d_image_sf writes the 3D image array for element number 
++        element_number. The array consists of ndimfast *ndimmid *ndimslow 
++        IEEE double or float elements of elsize bytes each, starting at 
++        array.
++        The _fs calls give the dimensions in a fast-to-slow order. The calls 
++        with no suffix and the calls _sf calls give the dimensions in 
++        slow-to-fast order
++        If the array is 1-dimensional, ndimslow should be the array size and 
++        ndimfast and, for the 3D calls, ndimmid, should be set to 1. If the 
++        array is 2-dimensional and the 3D calls are used, ndimslow and 
++        ndimmid should be used for the array dimensions and ndimfast should 
++        be set to 1.
++        The array will be compressed using the compression scheme specifed by 
++        compression. Currently, the available schemes are:
++        CBF_CANONICAL   Canonical-code compression (section 3.3.1) CBF_PACKED 
++             CCP4-style packing (section 3.3.2) CBF_PACKED_V2     CCP4-style 
++        packing, version 2 (section 3.3.2) CBF_BYTE_OFFSET   Simple  
++        "byte_offset " compression. CBF_NONE        No compression.
++        The values compressed are limited to 64 bits. If any element in the 
++        array is larger than 64 bits, the value compressed is the nearest 
++        64-bit value.
++        Currently, the source array must consist of chars, shorts or ints 
++        (signed or unsigned)for cbf_set_image, or IEEE doubles or floats for 
++        cbf_set_real_image. If elsize is not equal to sizeof (short), sizeof 
++        (int), sizeof(double) or sizeof(float), the function returns 
++        CBF_ARGUMENT.
++        The parameter reserved is presently unused and should be set to 0.
++        ARGUMENTS
++        handle           CBF handle. reserved         Unused. Any value other 
++        than 0 is invalid. element_number   The number of the detector 
++        element counting from 0 by order of appearance in the  
++        "diffrn_data_frame " category. compression      Compression type. 
++        array            Pointer to the image array. elsize           Size in 
++        bytes of each image array element. elsigned         Set to non-0 if 
++        the image array elements are signed. ndimslow         Slowest array 
++        dimension. ndimmid          Second slowest array dimension. ndimfast  
++               Fastest array dimension.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_3d_image_sf(self, *args)
++
++    def get_real_image_sf_as_string(self, *args):
++        """
++        Returns : (Binary)String
++        *args   : int element_number,int elsize,int ndimslow,int ndimfast
++
++        C prototype: int cbf_get_real_image_sf (cbf_handle handle,
++                         unsigned int reserved,      unsigned int element_number,
++                         void *array, size_t elsize, size_t      ndimslow,
++                         size_t ndimfast);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_image, cbf_get_image_fs and cbf_get_image_sf read the image 
++        array for element number element_number into an array. The array 
++        consists of ndimslow *ndimfast elements of elsize bytes each, 
++        starting at array. The elements are signed if elsign is non-0 and 
++        unsigned otherwise. cbf_get_real_image, cbf_get_real_image_fs and 
++        cbf_get_real_image_sf read the image array of IEEE doubles or floats 
++        for element number element_number into an array. A real array is 
++        always signed. cbf_get_3d_image, cbf_get_3d_image_fs and 
++        cbf_get_3d_image_sf read the 3D image array for element number 
++        element_number into an array. The array consists of ndimslow *ndimmid 
++        *ndimfast elements of elsize bytes each, starting at array. The 
++        elements are signed if elsign is non-0 and unsigned otherwise. 
++        cbf_get_real_3d_image, cbf_get_real_3d_image_fs, 
++        cbf_get_real_3d_image_sf reads the 3D image array of IEEE doubles or 
++        floats for element number element_number into an array. A real array 
++        is always signed.
++        The _fs calls give the dimensions in a fast-to-slow order. The calls 
++        with no suffix and the calls _sf calls give the dimensions in 
++        slow-to-fast order
++        The structure of the array as a 1-, 2- or 3-dimensional array should 
++        agree with the structure of the array given in the 
++        ARRAY_STRUCTURE_LIST category. If the array is 1-dimensional, 
++        ndimslow should be the array size and ndimfast and, for the 3D calls, 
++        ndimmid, should be set to 1 both in the call and in the imgCIF data 
++        being processed. If the array is 2-dimensional and a 3D call is used, 
++        ndimslow and ndimmid should be the
++
++        """
++        return _pycbf.cbf_handle_struct_get_real_image_sf_as_string(self, *args)
++
++    def get_image_as_string(self, *args):
++        """
++        Returns : (Binary)String
++        *args   : int element_number,int elsize,int elsign,int ndimslow,int ndimfast
++
++        C prototype: int cbf_get_image (cbf_handle handle, unsigned int reserved,
++                         unsigned      int element_number, void *array, size_t elsize,
++                         int elsign, size_t      ndimslow, size_t ndimfast);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_image, cbf_get_image_fs and cbf_get_image_sf read the image 
++        array for element number element_number into an array. The array 
++        consists of ndimslow *ndimfast elements of elsize bytes each, 
++        starting at array. The elements are signed if elsign is non-0 and 
++        unsigned otherwise. cbf_get_real_image, cbf_get_real_image_fs and 
++        cbf_get_real_image_sf read the image array of IEEE doubles or floats 
++        for element number element_number into an array. A real array is 
++        always signed. cbf_get_3d_image, cbf_get_3d_image_fs and 
++        cbf_get_3d_image_sf read the 3D image array for element number 
++        element_number into an array. The array consists of ndimslow *ndimmid 
++        *ndimfast elements of elsize bytes each, starting at array. The 
++        elements are signed if elsign is non-0 and unsigned otherwise. 
++        cbf_get_real_3d_image, cbf_get_real_3d_image_fs, 
++        cbf_get_real_3d_image_sf reads the 3D image array of IEEE doubles or 
++        floats for element number element_number into an array. A real array 
++        is always signed.
++        The _fs calls give the dimensions in a fast-to-slow order. The calls 
++        with no suffix and the calls _sf calls give the dimensions in 
++        slow-to-fast order
++        The structure of the array as a 1-, 2- or 3-dimensional array should 
++        agree with the structure of the array given in the 
++        ARRAY_STRUCTURE_LIST category. If the array is 1-dimensional, 
++        ndimslow should be the array size and ndimfast and, for the 3D calls, 
++        ndimmid, should be set to 1 both in the call and in the imgCIF data 
++        being processed. If the array is 2-dimensional and a 3D call is used, 
++        ndimslow and ndimmid should be the
++
++        """
++        return _pycbf.cbf_handle_struct_get_image_as_string(self, *args)
++
++    def set_tag_root(self, *args):
++        """
++        Returns : 
++        *args   : String tagname,String tagroot_in
++
++        C prototype: int cbf_set_tag_root (cbf_handle handle, const char* tagname,
++                         const      char*tagroot_in);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_find_tag_root sets *tagroot to the root tag of which tagname is 
++        an alias. cbf_set_tag_root sets tagname as an alias of tagroot_in in 
++        the dictionary associated with handle, creating the dictionary if 
++        necessary. cbf_require_tag_root sets *tagroot to the root tag of 
++        which tagname is an alias, if there is one, or to the value of 
++        tagname, if tagname is not an alias.
++        A returned tagroot string must not be modified in any way.
++        ARGUMENTS
++        handle       CBF handle. tagname      tag name which may be an alias. 
++        tagroot      pointer to a returned tag root name. tagroot_in   input 
++        tag root name.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_tag_root(self, *args)
++
++    def write_widefile(self, *args):
++        """
++        Returns : 
++        *args   : String filename,Integer ciforcbf,Integer Headers,Integer encoding
++
++        C prototype: int cbf_write_widefile (cbf_handle handle, FILE *file,
++                         int readable, int    ciforcbf, int flags, int encoding);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_write_file writes the CBF object specified by handle into the 
++        file file, following CIF 1.0 conventions of 80 character lines. 
++        cbf_write_widefile writes the CBF object specified by handle into the 
++        file file, following CIF 1.1 conventions of 2048 character lines. A 
++        warning is issued to stderr for ascii lines over the limit, and an 
++        attempt is made to fold lines to fit. No test is performed on binary 
++        sections.
++        If a dictionary has been provided, aliases will be applied on output.
++        Unlike cbf_read_file, the file does not have to be random-access.
++        If the file is random-access and readable, readable can be set to 
++        non-0 to indicate to CBFlib that the file can be used as a buffer to 
++        conserve disk space. If the file is not random-access or not 
++        readable, readable must be 0.
++
++        """
++        return _pycbf.cbf_handle_struct_write_widefile(self, *args)
++
++    def count_rows(self, *args):
++        """
++        Returns : Integer
++        *args   : 
++
++        C prototype: int cbf_count_rows (cbf_handle handle, unsigned int *rows);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_count_rows puts the number of rows in the current category in 
++        *rows .
++        ARGUMENTS
++        handle   CBF handle. rows     Pointer to the destination row count.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_count_rows(self, *args)
++
++    def require_datablock(self, *args):
++        """
++        Returns : string
++        *args   : 
++
++        C prototype: int cbf_require_datablock (cbf_handle handle,
++                         const char      *datablockname);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_require_datablock makes the data block with name datablockname 
++        the current data block, if it exists, or creates it if it does not.
++        The comparison is case-insensitive.
++        The current category becomes undefined.
++        ARGUMENTS
++        handle          CBF handle. datablockname   The name of the data 
++        block to find or create.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_require_datablock(self, *args)
++
++    def set_integerarray(self, *args):
++        """
++        Returns : 
++        *args   : int compression,int binary_id,(binary) String data,int elsize,
++                  int elsigned,int elements
++
++        C prototype: int cbf_set_integerarray (cbf_handle handle,
++                         unsigned int compression, int    binary_id, void *array,
++                         size_t elsize, int elsigned, size_t elements);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_integerarray sets the binary value of the item at the current 
++        column and row to an integer array. The array consists of elements 
++        elements of elsize bytes each, starting at array. The elements are 
++        signed if elsigned is non-0 and unsigned otherwise. binary_id is the 
++        binary section identifier. cbf_set_realarray sets the binary value of 
++        the item at the current column and row to an integer array. The array 
++        consists of elements elements of elsize bytes each, starting at 
++        array. binary_id is the binary section identifier.
++        The cbf_set_integerarray_wdims, cbf_set_integerarray_wdims_fs, 
++        cbf_set_integerarray_wdims_sf, cbf_set_realarray_wdims, 
++        cbf_set_realarray_wdims_fs and cbf_set_realarray_wdims_sf variants 
++        allow the data header values of byteorder, dimfast, dimmid, dimslow 
++        and padding to be set to the data byte order, the fastest, second 
++        fastest and third fastest array dimensions and the size in byte of 
++        the post data padding to be used.
++        The array will be compressed using the compression scheme specifed by 
++        compression. Currently, the available schemes are:
++        CBF_CANONICAL     Canonical-code compression (section 3.3.1) 
++        CBF_PACKED        CCP4-style packing (section 3.3.2) CBF_PACKED_V2    
++         CCP4-style packing, version 2 (section 3.3.2) CBF_BYTE_OFFSET   
++        Simple  "byte_offset " compression. CBF_NONE          No 
++        compression. NOTE: This scheme is by far the slowest of the four and 
++        uses much more disk space. It is intended for routine use with small 
++        arrays only. With large arrays (like images) it should be used only 
++        for debugging.
++        The values compressed are limited to 64 bits. If any element in the 
++        array is larger than 64 bits, the value compressed is the nearest 
++        64-bit value.
++        Currently, the source array must consist of chars, shorts or ints 
++        (signed or unsigned), for cbf_set_integerarray, or IEEE doubles or 
++        floats for cbf_set_realarray. If elsize is not equal to sizeof 
++        (char), sizeof (short) or sizeof (int), the function returns 
++        CBF_ARGUMENT.
++        ARGUMENTS
++        handle        CBF handle. compression   Compression method to use. 
++        binary_id     Integer binary identifier. array         Pointer to the 
++        source array. elsize        Size in bytes of each source array 
++        element. elsigned      Set to non-0 if the source array elements are 
++        signed. elements: The number of elements in the array.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_set_integerarray(self, *args)
++
++    def new_datablock(self, *args):
++        """
++        Returns : string
++        *args   : 
++
++        C prototype: int cbf_new_datablock (cbf_handle handle,
++                         const char *datablockname);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_new_datablock creates a new data block with name datablockname 
++        and makes it the current data block. cbf_new_saveframe creates a new 
++        save frame with name saveframename within the current data block and 
++        makes the new save frame the current save frame.
++        If a data block or save frame with this name already exists, the 
++        existing data block or save frame becomes the current data block or 
++        save frame.
++        ARGUMENTS
++        handle          CBF handle. datablockname   The name of the new data 
++        block. saveframename   The name of the new save frame.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_new_datablock(self, *args)
++
++    def set_datestamp(self, *args):
++        """
++        Returns : 
++        *args   : int year,int month,int day,int hour,int minute,double second,
++                  int timezone,Float precision
++
++        C prototype: int cbf_set_datestamp (cbf_handle handle, unsigned int reserved,
++                         int      year, int month, int day, int hour, int minute,
++                         double second, int      timezone, double precision);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_datestamp sets the collection timestamp in seconds since 
++        January 1 1970 to the value specified by time. The timezone 
++        difference from UTC
++
++        """
++        return _pycbf.cbf_handle_struct_set_datestamp(self, *args)
++
++    def next_row(self, *args):
++        """
++        Returns : 
++        *args   : 
++
++        C prototype: int cbf_next_row (cbf_handle handle);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_next_row makes the row following the current row in the current 
++        category the current row.
++        If there are no more rows, the function returns CBF_NOTFOUND.
++        The current column is not affected.
++        ARGUMENTS
++        handle   CBF handle.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_next_row(self, *args)
++
++    def set_category_root(self, *args):
++        """
++        Returns : 
++        *args   : String categoryname,String categoryroot
++
++        C prototype: int cbf_set_category_root (cbf_handle handle,
++                         const char*      categoryname_in, const char*categoryroot);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_find_category_root sets *categoryroot to the root category of 
++        which categoryname is an alias. cbf_set_category_root sets 
++        categoryname_in as an alias of categoryroot in the dictionary 
++        associated with handle, creating the dictionary if necessary. 
++        cbf_require_category_root sets *categoryroot to the root category of 
++        which categoryname is an alias, if there is one, or to the value of 
++        categoryname, if categoryname is not an alias.
++        A returned categoryroot string must not be modified in any way.
++        ARGUMENTS
++        handle            CBF handle. categoryname      category name which 
++        may be an alias. categoryroot      pointer to a returned category 
++        root name. categoryroot_in   input category root name.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_category_root(self, *args)
++
++    def set_pixel_size_fs(self, *args):
++        """
++        Returns : 
++        *args   : Int element_number,Int axis_number,Float pixel size
++
++        C prototype: int cbf_set_pixel_size_fs(cbf_handle handle,
++                         unsigned int      element_number, int axis_number,
++                         double psize);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_pixel_size and cbf_set_pixel_size_sf set the item in the 
++        "e;size"e; column of the  "array_structure_list " category 
++        at the row which matches axis axis_number of the detector element 
++        element_number converting the double pixel size psize from meters to 
++        millimeters in storing it in the  "size " column for the axis 
++        axis_number of the detector element element_number. The axis_number 
++        is numbered from 1, starting with the slowest axis. 
++        cbf_set_pixel_size_fs sets the item
++
++        """
++        return _pycbf.cbf_handle_struct_set_pixel_size_fs(self, *args)
++
++    def insert_row(self, *args):
++        """
++        Returns : 
++        *args   : Integer
++
++        C prototype: int cbf_insert_row (cbf_handle handle, unsigned int rownumber);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_insert_row adds a new row to the current category. The new row is 
++        inserted as row rownumber and existing rows starting from rownumber 
++        are moved up by 1. The new row becomes the current row.
++        If the category has fewer than rownumber rows, the function returns 
++        CBF_NOTFOUND.
++        The row numbers start from 0.
++        ARGUMENTS
++        handle      CBF handle. rownumber   The row number of the new row.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_insert_row(self, *args)
++
++    def new_column(self, *args):
++        """
++        Returns : string
++        *args   : 
++
++        C prototype: int cbf_new_column (cbf_handle handle, const char *columnname);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_new_column creates a new column in the current category with name 
++        columnname and makes it the current column.
++        If a column with this name already exists, the existing column 
++        becomes the current category.
++        ARGUMENTS
++        handle       CBF handle. columnname   The name of the new column.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_new_column(self, *args)
++
++    def get_real_3d_image_as_string(self, *args):
++        """
++        Returns : (Binary)String
++        *args   : int element_number,int elsize,int ndimslow,int ndimmid,int ndimfast
++
++        C prototype: int cbf_get_real_3d_image (cbf_handle handle,
++                         unsigned int reserved,      unsigned int element_number,
++                         void *array, size_t elsize, size_t      ndimslow,
++                         size_t ndimmid, size_t ndimfast);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_image, cbf_get_image_fs and cbf_get_image_sf read the image 
++        array for element number element_number into an array. The array 
++        consists of ndimslow *ndimfast elements of elsize bytes each, 
++        starting at array. The elements are signed if elsign is non-0 and 
++        unsigned otherwise. cbf_get_real_image, cbf_get_real_image_fs and 
++        cbf_get_real_image_sf read the image array of IEEE doubles or floats 
++        for element number element_number into an array. A real array is 
++        always signed. cbf_get_3d_image, cbf_get_3d_image_fs and 
++        cbf_get_3d_image_sf read the 3D image array for element number 
++        element_number into an array. The array consists of ndimslow *ndimmid 
++        *ndimfast elements of elsize bytes each, starting at array. The 
++        elements are signed if elsign is non-0 and unsigned otherwise. 
++        cbf_get_real_3d_image, cbf_get_real_3d_image_fs, 
++        cbf_get_real_3d_image_sf reads the 3D image array of IEEE doubles or 
++        floats for element number element_number into an array. A real array 
++        is always signed.
++        The _fs calls give the dimensions in a fast-to-slow order. The calls 
++        with no suffix and the calls _sf calls give the dimensions in 
++        slow-to-fast order
++        The structure of the array as a 1-, 2- or 3-dimensional array should 
++        agree with the structure of the array given in the 
++        ARRAY_STRUCTURE_LIST category. If the array is 1-dimensional, 
++        ndimslow should be the array size and ndimfast and, for the 3D calls, 
++        ndimmid, should be set to 1 both in the call and in the imgCIF data 
++        being processed. If the array is 2-dimensional and a 3D call is used, 
++        ndimslow and ndimmid should be the
++
++        """
++        return _pycbf.cbf_handle_struct_get_real_3d_image_as_string(self, *args)
++
++    def get_integration_time(self):
++        """
++        Returns : Float time
++        *args   : 
++
++        C prototype: int cbf_get_integration_time (cbf_handle handle,
++                         unsigned int reserved,      double *time);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_integration_time sets *time to the integration time in 
++        seconds. The parameter reserved is presently unused and should be set 
++        to 0.
++        ARGUMENTS
++        handle     CBF handle. reserved   Unused. Any value other than 0 is 
++        invalid. time       Pointer to the destination time.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_get_integration_time(self)
++
++    def set_realarray(self, *args):
++        """
++        Returns : 
++        *args   : int compression,int binary_id,(binary) String data,int elsize,
++                  int elements
++
++        C prototype: int cbf_set_realarray (cbf_handle handle,
++                         unsigned int compression, int    binary_id, void *array,
++                         size_t elsize, size_t elements);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_integerarray sets the binary value of the item at the current 
++        column and row to an integer array. The array consists of elements 
++        elements of elsize bytes each, starting at array. The elements are 
++        signed if elsigned is non-0 and unsigned otherwise. binary_id is the 
++        binary section identifier. cbf_set_realarray sets the binary value of 
++        the item at the current column and row to an integer array. The array 
++        consists of elements elements of elsize bytes each, starting at 
++        array. binary_id is the binary section identifier.
++        The cbf_set_integerarray_wdims, cbf_set_integerarray_wdims_fs, 
++        cbf_set_integerarray_wdims_sf, cbf_set_realarray_wdims, 
++        cbf_set_realarray_wdims_fs and cbf_set_realarray_wdims_sf variants 
++        allow the data header values of byteorder, dimfast, dimmid, dimslow 
++        and padding to be set to the data byte order, the fastest, second 
++        fastest and third fastest array dimensions and the size in byte of 
++        the post data padding to be used.
++        The array will be compressed using the compression scheme specifed by 
++        compression. Currently, the available schemes are:
++        CBF_CANONICAL     Canonical-code compression (section 3.3.1) 
++        CBF_PACKED        CCP4-style packing (section 3.3.2) CBF_PACKED_V2    
++         CCP4-style packing, version 2 (section 3.3.2) CBF_BYTE_OFFSET   
++        Simple  "byte_offset " compression. CBF_NONE          No 
++        compression. NOTE: This scheme is by far the slowest of the four and 
++        uses much more disk space. It is intended for routine use with small 
++        arrays only. With large arrays (like images) it should be used only 
++        for debugging.
++        The values compressed are limited to 64 bits. If any element in the 
++        array is larger than 64 bits, the value compressed is the nearest 
++        64-bit value.
++        Currently, the source array must consist of chars, shorts or ints 
++        (signed or unsigned), for cbf_set_integerarray, or IEEE doubles or 
++        floats for cbf_set_realarray. If elsize is not equal to sizeof 
++        (char), sizeof (short) or sizeof (int), the function returns 
++        CBF_ARGUMENT.
++        ARGUMENTS
++        handle        CBF handle. compression   Compression method to use. 
++        binary_id     Integer binary identifier. array         Pointer to the 
++        source array. elsize        Size in bytes of each source array 
++        element. elsigned      Set to non-0 if the source array elements are 
++        signed. elements: The number of elements in the array.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_set_realarray(self, *args)
++
++    def get_element_id(self, *args):
++        """
++        Returns : String
++        *args   : Integer element_number
++
++        C prototype: int cbf_get_element_id (cbf_handle handle,
++                         unsigned int element_number,      const char **element_id);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_element_id sets *element_id to point to the ASCII value of 
++        the element_number'th  "diffrn_data_frame.detector_element_id " 
++        entry, counting from 0.
++        If the detector element does not exist, the function returns 
++        CBF_NOTFOUND.
++        The element_id will be valid as long as the item exists and has not 
++        been set to a new value.
++        The element_id must not be modified by the program in any way.
++        ARGUMENTS
++        handle           CBF handle. element_number   The number of the 
++        detector element counting from 0 by order of appearance in the  
++        "diffrn_data_frame " category. element_id       Pointer to the 
++        destination.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_get_element_id(self, *args)
++
++    def get_image_sf_as_string(self, *args):
++        """
++        Returns : (Binary)String
++        *args   : int element_number,int elsize,int elsign,int ndimslow,int ndimfast
++
++        C prototype: int cbf_get_image_sf (cbf_handle handle, unsigned int reserved,
++                         unsigned      int element_number, void *array, size_t elsize,
++                         int elsign, size_t      ndimslow, size_t ndimfast);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_image, cbf_get_image_fs and cbf_get_image_sf read the image 
++        array for element number element_number into an array. The array 
++        consists of ndimslow *ndimfast elements of elsize bytes each, 
++        starting at array. The elements are signed if elsign is non-0 and 
++        unsigned otherwise. cbf_get_real_image, cbf_get_real_image_fs and 
++        cbf_get_real_image_sf read the image array of IEEE doubles or floats 
++        for element number element_number into an array. A real array is 
++        always signed. cbf_get_3d_image, cbf_get_3d_image_fs and 
++        cbf_get_3d_image_sf read the 3D image array for element number 
++        element_number into an array. The array consists of ndimslow *ndimmid 
++        *ndimfast elements of elsize bytes each, starting at array. The 
++        elements are signed if elsign is non-0 and unsigned otherwise. 
++        cbf_get_real_3d_image, cbf_get_real_3d_image_fs, 
++        cbf_get_real_3d_image_sf reads the 3D image array of IEEE doubles or 
++        floats for element number element_number into an array. A real array 
++        is always signed.
++        The _fs calls give the dimensions in a fast-to-slow order. The calls 
++        with no suffix and the calls _sf calls give the dimensions in 
++        slow-to-fast order
++        The structure of the array as a 1-, 2- or 3-dimensional array should 
++        agree with the structure of the array given in the 
++        ARRAY_STRUCTURE_LIST category. If the array is 1-dimensional, 
++        ndimslow should be the array size and ndimfast and, for the 3D calls, 
++        ndimmid, should be set to 1 both in the call and in the imgCIF data 
++        being processed. If the array is 2-dimensional and a 3D call is used, 
++        ndimslow and ndimmid should be the
++
++        """
++        return _pycbf.cbf_handle_struct_get_image_sf_as_string(self, *args)
++
++    def construct_positioner(self, *args):
++        """
++        Returns : pycbf positioner object
++        *args   : String axis_id
++
++        C prototype: int cbf_construct_positioner (cbf_handle handle,
++                         cbf_positioner      *positioner, const char *axis_id);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_construct_positioner constructs a positioner object for the axis 
++        given by axis_id using the description in the CBF object handle and 
++        initialises the positioner handle *positioner.
++        cbf_construct_reference positioner constructs a positioner object for 
++        the axis given by axis_id using the description in the CBF object 
++        handle and initialises the detector handle *detector using the 
++        reference settings of the axes.
++        ARGUMENTS
++        handle     CBF handle. detector   Pointer to the destination detector 
++        handle. axis_id    The identifier of the axis in the  "axis " 
++        category.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_construct_positioner(self, *args)
++
++    def get_3d_image_size_fs(self, *args):
++        """get_3d_image_size_fs(self, unsigned int element_number)"""
++        return _pycbf.cbf_handle_struct_get_3d_image_size_fs(self, *args)
++
++    def set_value(self, *args):
++        """
++        Returns : string
++        *args   : 
++
++        C prototype: int cbf_set_value (cbf_handle handle, const char *value);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_value sets the item at the current column and row to the 
++        ASCII value value.
++        ARGUMENTS
++        handle   CBF handle. value    ASCII value.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_set_value(self, *args)
++
++    def set_current_timestamp(self, *args):
++        """
++        Returns : 
++        *args   : Integer timezone
++
++        C prototype: int cbf_set_current_timestamp (cbf_handle handle,
++                         unsigned int reserved,      int timezone);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_current_timestamp sets the collection timestamp to the 
++        current time. The timezone difference from UTC in minutes is set to 
++        timezone. If no timezone is desired, timezone should be 
++        CBF_NOTIMEZONE. If no timezone is used, the timest amp will be UTC. 
++        The parameter reserved is presently unused and should be set to 0.
++        The new timestamp will have a precision of 1 second.
++        ARGUMENTS
++        handle     CBF handle. reserved   Unused.   Any value other than 0 is 
++        invalid. timezone   Timezone difference from UTC in minutes or 
++        CBF_NOTIMEZONE.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_current_timestamp(self, *args)
++
++    def require_doublevalue(self, *args):
++        """
++        Returns : Float Number
++        *args   : Float Default
++
++        C prototype: int cbf_require_doublevalue (cbf_handle handle, double *number,
++                         double    defaultvalue);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_doublevalue sets *number to the value of the ASCII item at 
++        the current column and row interpreted as a decimal floating-point 
++        number. cbf_require_doublevalue sets *number to the value of the 
++        ASCII item at the current column and row interpreted as a decimal 
++        floating-point number, setting it to defaultvalue if necessary.
++        If the value is not ASCII, the function returns CBF_BINARY.
++        ARGUMENTS
++        handle         CBF handle. number         Pointer to the destination 
++        number. defaultvalue   default number value.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_require_doublevalue(self, *args)
++
++    def rewind_datablock(self, *args):
++        """
++        Returns : 
++        *args   : 
++
++        C prototype: int cbf_rewind_datablock (cbf_handle handle);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_rewind_datablock makes the first data block the current data 
++        block.
++        If there are no data blocks, the function returns CBF_NOTFOUND.
++        The current category becomes undefined.
++        ARGUMENTS
++        handle   CBF handle.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_rewind_datablock(self, *args)
++
++    def require_column_value(self, *args):
++        """
++        Returns : String Name
++        *args   : String columnnanme,String Default
++
++        C prototype: int cbf_require_column_value (cbf_handle handle,
++                         const char *columnname,      const char **value,
++                         const char *defaultvalue);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_require_column_doublevalue sets *value to the ASCII item at the 
++        current row for the column given with the name given by *columnname, 
++        or to the string given by defaultvalue if the item cannot be found.
++        ARGUMENTS
++        handle         CBF handle. columnname     Name of the column 
++        containing the number. value          pointer to the location to 
++        receive the value. defaultvalue   Value to use if the requested 
++        column and value cannot be found.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_require_column_value(self, *args)
++
++    def get_dictionary(self):
++        """
++        Returns : CBFHandle dictionary
++        *args   : 
++
++        C prototype: int cbf_get_dictionary (cbf_handle handle,
++                         cbf_handle * dictionary);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_dictionary sets *dictionary to the handle of a CBF which has 
++        been associated with the CBF handle by cbf_set_dictionary. 
++        cbf_set_dictionary associates the CBF handle dictionary_in with 
++        handle as its dictionary. cbf_require_dictionary sets *dictionary to 
++        the handle of a CBF which has been associated with the CBF handle by 
++        cbf_set_dictionary or creates a new empty CBF and associates it with 
++        handle, returning the new handle in *dictionary.
++        ARGUMENTS
++        handle          CBF handle. dictionary      Pointer to CBF handle of 
++        dictionary. dictionary_in   CBF handle of dcitionary.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_get_dictionary(self)
++
++    def reset_saveframe(self, *args):
++        """
++        Returns : 
++        *args   : 
++
++        C prototype: int cbf_reset_saveframe (cbf_handle handle);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_reset_datablock deletes all categories from the current data 
++        block. cbf_reset_saveframe deletes all categories from the current 
++        save frame.
++        ARGUMENTS
++        handle   CBF handle.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_reset_saveframe(self, *args)
++
++    def set_reciprocal_cell(self, *args):
++        """
++        Returns : 
++        *args   : double cell[6]
++
++        C prototype: int cbf_set_reciprocal_cell (cbf_handle handle, double cell[6],
++                         double      cell_esd[6] );
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_reciprocal_cell sets the reciprocal cell parameters to the 
++        double values given in cell[0:2] for the reciprocal cell edge lengths 
++        a*, b* and c* in AAngstroms-1, the double values given in cell[3:5] 
++        for the reciprocal cell angles a*, b* and g* in degrees, the double 
++        values given in cell_esd[0:2] for the estimated strandard deviations 
++        of the reciprocal cell edge lengths a*, b* and c* in AAngstroms, and 
++        the double values given in cell_esd[3:5] for the estimated standard 
++        deviations of the reciprocal cell angles a*, b* and g* in degrees.
++        The values are placed in the first row of the  "cell " category. If 
++        no value has been given for  "_cell.entry_id ", it is set to the 
++        value of the  "diffrn.id " entry of the current data block.
++        cell or cell_esd may be NULL.
++        If cell is NULL, the reciprocal cell parameters are not set.
++        If cell_esd is NULL, the reciprocal cell parameter esds are not set.
++        If the  "cell " category is not present, it is created. If any of 
++        the necessary columns are not present, they are created.
++        ARGUMENTS
++        handle     CBF handle. cell       Pointer to the array of 6 doubles 
++        for the reciprocal cell parameters. cell_esd   Pointer to the array 
++        of 6 doubles for the reciprocal cell parameter esds.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_set_reciprocal_cell(self, *args)
++
++    def set_reciprocal_cell_esd(self, *args):
++        """
++        Returns : 
++        *args   : double cell_esd[6]
++
++        C prototype: int cbf_set_reciprocal_cell (cbf_handle handle, double cell[6],
++                         double      cell_esd[6] );
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_reciprocal_cell sets the reciprocal cell parameters to the 
++        double values given in cell[0:2] for the reciprocal cell edge lengths 
++        a*, b* and c* in AAngstroms-1, the double values given in cell[3:5] 
++        for the reciprocal cell angles a*, b* and g* in degrees, the double 
++        values given in cell_esd[0:2] for the estimated strandard deviations 
++        of the reciprocal cell edge lengths a*, b* and c* in AAngstroms, and 
++        the double values given in cell_esd[3:5] for the estimated standard 
++        deviations of the reciprocal cell angles a*, b* and g* in degrees.
++        The values are placed in the first row of the  "cell " category. If 
++        no value has been given for  "_cell.entry_id ", it is set to the 
++        value of the  "diffrn.id " entry of the current data block.
++        cell or cell_esd may be NULL.
++        If cell is NULL, the reciprocal cell parameters are not set.
++        If cell_esd is NULL, the reciprocal cell parameter esds are not set.
++        If the  "cell " category is not present, it is created. If any of 
++        the necessary columns are not present, they are created.
++        ARGUMENTS
++        handle     CBF handle. cell       Pointer to the array of 6 doubles 
++        for the reciprocal cell parameters. cell_esd   Pointer to the array 
++        of 6 doubles for the reciprocal cell parameter esds.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_set_reciprocal_cell_esd(self, *args)
++
++    def set_real_3d_image_fs(self, *args):
++        """
++        Returns : 
++        *args   : int element_number,int compression,(binary) String data,int elsize,
++                  int dimfast,int dimmid,int dimslow
++
++        C prototype: int cbf_set_real_3d_image_fs(cbf_handle handle,
++                         unsigned int reserved,      unsigned int element_number,
++                         unsigned int compression, void      *array,size_t elsize,
++                         size_t ndimfast, size_t ndimmid, size_t ndimslow);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_image, cbf_set_image_fs and cbf_set_image_sf write the image 
++        array for element number element_number. The array consists of 
++        ndimfast *ndimslow elements of elsize bytes each, starting at array. 
++        The elements are signed if elsign is non-zero and unsigned otherwise. 
++        cbf_set_real_image, cbf_set_real_image_fs and cbf_set_real_image_sf 
++        write the image array for element number element_number. The array 
++        consists of ndimfast *ndimslow IEEE double or float elements of 
++        elsize bytes each, starting at array. cbf_set_3d_image, 
++        cbf_set_3d_image_fs and cbf_set_3d_image_sf write the 3D image array 
++        for element number element_number. The array consists of ndimfast 
++        *ndimmid *ndimslow elements of elsize bytes each, starting at array. 
++        The elements are signed if elsign is non-0 and unsigned otherwise. 
++        cbf_set_real_3d_image, cbf_set_real_3d_image_fs and 
++        cbf_set_real_3d_image_sf writes the 3D image array for element number 
++        element_number. The array consists of ndimfast *ndimmid *ndimslow 
++        IEEE double or float elements of elsize bytes each, starting at 
++        array.
++        The _fs calls give the dimensions in a fast-to-slow order. The calls 
++        with no suffix and the calls _sf calls give the dimensions in 
++        slow-to-fast order
++        If the array is 1-dimensional, ndimslow should be the array size and 
++        ndimfast and, for the 3D calls, ndimmid, should be set to 1. If the 
++        array is 2-dimensional and the 3D calls are used, ndimslow and 
++        ndimmid should be used for the array dimensions and ndimfast should 
++        be set to 1.
++        The array will be compressed using the compression scheme specifed by 
++        compression. Currently, the available schemes are:
++        CBF_CANONICAL   Canonical-code compression (section 3.3.1) CBF_PACKED 
++             CCP4-style packing (section 3.3.2) CBF_PACKED_V2     CCP4-style 
++        packing, version 2 (section 3.3.2) CBF_BYTE_OFFSET   Simple  
++        "byte_offset " compression. CBF_NONE        No compression.
++        The values compressed are limited to 64 bits. If any element in the 
++        array is larger than 64 bits, the value compressed is the nearest 
++        64-bit value.
++        Currently, the source array must consist of chars, shorts or ints 
++        (signed or unsigned)for cbf_set_image, or IEEE doubles or floats for 
++        cbf_set_real_image. If elsize is not equal to sizeof (short), sizeof 
++        (int), sizeof(double) or sizeof(float), the function returns 
++        CBF_ARGUMENT.
++        The parameter reserved is presently unused and should be set to 0.
++        ARGUMENTS
++        handle           CBF handle. reserved         Unused. Any value other 
++        than 0 is invalid. element_number   The number of the detector 
++        element counting from 0 by order of appearance in the  
++        "diffrn_data_frame " category. compression      Compression type. 
++        array            Pointer to the image array. elsize           Size in 
++        bytes of each image array element. elsigned         Set to non-0 if 
++        the image array elements are signed. ndimslow         Slowest array 
++        dimension. ndimmid          Second slowest array dimension. ndimfast  
++               Fastest array dimension.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_real_3d_image_fs(self, *args)
++
++    def set_doublevalue(self, *args):
++        """
++        Returns : 
++        *args   : String format,Float number
++
++        C prototype: int cbf_set_doublevalue (cbf_handle handle, const char *format,
++                         double    number);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_doublevalue sets the item at the current column and row to 
++        the floating-point value number written as an ASCII string with the 
++        format specified by format as appropriate for the printf function.
++        ARGUMENTS
++        handle   CBF handle. format   Format for the number. number   
++        Floating-point value.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_set_doublevalue(self, *args)
++
++    def find_category(self, *args):
++        """
++        Returns : string
++        *args   : 
++
++        C prototype: int cbf_find_category (cbf_handle handle,
++                         const char *categoryname);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_find_category makes the category in the current data block with 
++        name categoryname the current category.
++        The comparison is case-insensitive.
++        If the category does not exist, the function returns CBF_NOTFOUND.
++        The current column and row become undefined.
++        ARGUMENTS
++        handle         CBF handle. categoryname   The name of the category to 
++        find.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_find_category(self, *args)
++
++    def get_integerarrayparameters_wdims_fs(self):
++        """
++        Returns : int compression,int binary_id,int elsize,int elsigned,int elunsigned,
++                  int elements,int minelement,int maxelement,char **bo,int *bolen,
++                  int dimfast,int dimmid,int dimslow,int padding
++        *args   : 
++
++        C prototype: int cbf_get_integerarrayparameters_wdims_fs (cbf_handle handle,
++                         unsigned    int *compression, int *binary_id, size_t *elsize,
++                         int *elsigned, int    *elunsigned, size_t *elements,
++                         int *minelement, int *maxelement, const    char **byteorder,
++                         size_t *dimfast, size_t *dimmid, size_t *dimslow,
++                         size_t    *padding);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_get_integerarrayparameters sets *compression, *binary_id, 
++        *elsize, *elsigned, *elunsigned, *elements, *minelement and 
++        *maxelement to values read from the binary value of the item at the 
++        current column and row. This provides all the arguments needed for a 
++        subsequent call to cbf_set_integerarray, if a copy of the array is to 
++        be made into another CIF or CBF. cbf_get_realarrayparameters sets 
++        *compression, *binary_id, *elsize, *elements to values read from the 
++        binary value of the item at the current column and row. This provides 
++        all the arguments needed for a subsequent call to cbf_set_realarray, 
++        if a copy of the arry is to be made into another CIF or CBF.
++        The variants cbf_get_integerarrayparameters_wdims, 
++        cbf_get_integerarrayparameters_wdims_fs, 
++        cbf_get_integerarrayparameters_wdims_sf, 
++        cbf_get_realarrayparameters_wdims, 
++        cbf_get_realarrayparameters_wdims_fs, 
++        cbf_get_realarrayparameters_wdims_sf set **byteorder, *dimfast, 
++        *dimmid, *dimslow, and *padding as well, providing the additional 
++        parameters needed for a subsequent call to cbf_set_integerarray_wdims 
++        or cbf_set_realarray_wdims.
++        The value returned in *byteorder is a pointer either to the string  
++        "little_endian " or to the string  "big_endian ". This should be 
++        the byte order of the data, not necessarily of the host machine. No 
++        attempt should be made to modify this string. At this time only  
++        "little_endian " will be returned.
++        The values returned in *dimfast, *dimmid and *dimslow are the sizes 
++        of the fastest changing, second fastest changing and third fastest 
++        changing dimensions of the array, if specified, or zero, if not 
++        specified.
++        The value returned in *padding is the size of the post-data padding, 
++        if any and if specified in the data header. The value is given as a 
++        count of octets.
++        If the value is not binary, the function returns CBF_ASCII.
++        ARGUMENTS
++        handle        CBF handle. compression   Compression method used. 
++        elsize        Size in bytes of each array element. binary_id     
++        Pointer to the destination integer binary identifier. elsigned      
++        Pointer to an integer. Set to 1 if the elements can be read as signed 
++        integers. elunsigned    Pointer to an integer. Set to 1 if the 
++        elements can be read as unsigned integers. elements      Pointer to 
++        the destination number of elements. minelement    Pointer to the 
++        destination smallest element. maxelement    Pointer to the 
++        destination largest element. byteorder     Pointer to the destination 
++        byte order. dimfast       Pointer to the destination fastest 
++        dimension. dimmid        Pointer to the destination second fastest 
++        dimension. dimslow       Pointer to the destination third fastest 
++        dimension. padding       Pointer to the destination padding size.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_get_integerarrayparameters_wdims_fs(self)
++
++    def set_realarray_wdims_fs(self, *args):
++        """
++        Returns : 
++        *args   : int compression,int binary_id,(binary) String data,int elsize,
++                  int elements,String byteorder,int dimfast,int dimmid,int dimslow,
++                  int padding
++
++        C prototype: int cbf_set_realarray_wdims_fs (cbf_handle handle,
++                         unsigned int    compression, int binary_id, void *array,
++                         size_t elsize, size_t elements,    const char *byteorder,
++                         size_t dimfast, size_t dimmid, size_t dimslow,
++                            size_t padding);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_integerarray sets the binary value of the item at the current 
++        column and row to an integer array. The array consists of elements 
++        elements of elsize bytes each, starting at array. The elements are 
++        signed if elsigned is non-0 and unsigned otherwise. binary_id is the 
++        binary section identifier. cbf_set_realarray sets the binary value of 
++        the item at the current column and row to an integer array. The array 
++        consists of elements elements of elsize bytes each, starting at 
++        array. binary_id is the binary section identifier.
++        The cbf_set_integerarray_wdims, cbf_set_integerarray_wdims_fs, 
++        cbf_set_integerarray_wdims_sf, cbf_set_realarray_wdims, 
++        cbf_set_realarray_wdims_fs and cbf_set_realarray_wdims_sf variants 
++        allow the data header values of byteorder, dimfast, dimmid, dimslow 
++        and padding to be set to the data byte order, the fastest, second 
++        fastest and third fastest array dimensions and the size in byte of 
++        the post data padding to be used.
++        The array will be compressed using the compression scheme specifed by 
++        compression. Currently, the available schemes are:
++        CBF_CANONICAL     Canonical-code compression (section 3.3.1) 
++        CBF_PACKED        CCP4-style packing (section 3.3.2) CBF_PACKED_V2    
++         CCP4-style packing, version 2 (section 3.3.2) CBF_BYTE_OFFSET   
++        Simple  "byte_offset " compression. CBF_NONE          No 
++        compression. NOTE: This scheme is by far the slowest of the four and 
++        uses much more disk space. It is intended for routine use with small 
++        arrays only. With large arrays (like images) it should be used only 
++        for debugging.
++        The values compressed are limited to 64 bits. If any element in the 
++        array is larger than 64 bits, the value compressed is the nearest 
++        64-bit value.
++        Currently, the source array must consist of chars, shorts or ints 
++        (signed or unsigned), for cbf_set_integerarray, or IEEE doubles or 
++        floats for cbf_set_realarray. If elsize is not equal to sizeof 
++        (char), sizeof (short) or sizeof (int), the function returns 
++        CBF_ARGUMENT.
++        ARGUMENTS
++        handle        CBF handle. compression   Compression method to use. 
++        binary_id     Integer binary identifier. array         Pointer to the 
++        source array. elsize        Size in bytes of each source array 
++        element. elsigned      Set to non-0 if the source array elements are 
++        signed. elements: The number of elements in the array.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_set_realarray_wdims_fs(self, *args)
++
++    def find_category_root(self, *args):
++        """
++        Returns : String categoryroot
++        *args   : String categoryname
++
++        C prototype: int cbf_find_category_root (cbf_handle handle,
++                         const char* categoryname,      const char** categoryroot);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_find_category_root sets *categoryroot to the root category of 
++        which categoryname is an alias. cbf_set_category_root sets 
++        categoryname_in as an alias of categoryroot in the dictionary 
++        associated with handle, creating the dictionary if necessary. 
++        cbf_require_category_root sets *categoryroot to the root category of 
++        which categoryname is an alias, if there is one, or to the value of 
++        categoryname, if categoryname is not an alias.
++        A returned categoryroot string must not be modified in any way.
++        ARGUMENTS
++        handle            CBF handle. categoryname      category name which 
++        may be an alias. categoryroot      pointer to a returned category 
++        root name. categoryroot_in   input category root name.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_find_category_root(self, *args)
++
++    def set_integerarray_wdims_fs(self, *args):
++        """
++        Returns : 
++        *args   : int compression,int binary_id,(binary) String data,int elsize,
++                  int elements,String byteorder,int dimfast,int dimmid,int dimslow,
++                  int padding
++
++        C prototype: int cbf_set_integerarray_wdims_fs (cbf_handle handle,
++                         unsigned int    compression, int binary_id, void *array,
++                         size_t elsize, int elsigned,    size_t elements,
++                         const char *byteorder, size_t dimfast, size_t dimmid,
++                            size_t dimslow, size_t padding);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_integerarray sets the binary value of the item at the current 
++        column and row to an integer array. The array consists of elements 
++        elements of elsize bytes each, starting at array. The elements are 
++        signed if elsigned is non-0 and unsigned otherwise. binary_id is the 
++        binary section identifier. cbf_set_realarray sets the binary value of 
++        the item at the current column and row to an integer array. The array 
++        consists of elements elements of elsize bytes each, starting at 
++        array. binary_id is the binary section identifier.
++        The cbf_set_integerarray_wdims, cbf_set_integerarray_wdims_fs, 
++        cbf_set_integerarray_wdims_sf, cbf_set_realarray_wdims, 
++        cbf_set_realarray_wdims_fs and cbf_set_realarray_wdims_sf variants 
++        allow the data header values of byteorder, dimfast, dimmid, dimslow 
++        and padding to be set to the data byte order, the fastest, second 
++        fastest and third fastest array dimensions and the size in byte of 
++        the post data padding to be used.
++        The array will be compressed using the compression scheme specifed by 
++        compression. Currently, the available schemes are:
++        CBF_CANONICAL     Canonical-code compression (section 3.3.1) 
++        CBF_PACKED        CCP4-style packing (section 3.3.2) CBF_PACKED_V2    
++         CCP4-style packing, version 2 (section 3.3.2) CBF_BYTE_OFFSET   
++        Simple  "byte_offset " compression. CBF_NONE          No 
++        compression. NOTE: This scheme is by far the slowest of the four and 
++        uses much more disk space. It is intended for routine use with small 
++        arrays only. With large arrays (like images) it should be used only 
++        for debugging.
++        The values compressed are limited to 64 bits. If any element in the 
++        array is larger than 64 bits, the value compressed is the nearest 
++        64-bit value.
++        Currently, the source array must consist of chars, shorts or ints 
++        (signed or unsigned), for cbf_set_integerarray, or IEEE doubles or 
++        floats for cbf_set_realarray. If elsize is not equal to sizeof 
++        (char), sizeof (short) or sizeof (int), the function returns 
++        CBF_ARGUMENT.
++        ARGUMENTS
++        handle        CBF handle. compression   Compression method to use. 
++        binary_id     Integer binary identifier. array         Pointer to the 
++        source array. elsize        Size in bytes of each source array 
++        element. elsigned      Set to non-0 if the source array elements are 
++        signed. elements: The number of elements in the array.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_set_integerarray_wdims_fs(self, *args)
++
++    def set_image_sf(self, *args):
++        """
++        Returns : 
++        *args   : int element_number,int compression,(binary) String data,int elsize,
++                  int elsign,int dimslow,int dimfast
++
++        C prototype: int cbf_set_image_sf(cbf_handle handle, unsigned int reserved,
++                         unsigned      int element_number, unsigned int compression,
++                         void *array, size_t      elsize, int elsign, size_t ndimslow,
++                         size_t ndimfast);
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_image, cbf_set_image_fs and cbf_set_image_sf write the image 
++        array for element number element_number. The array consists of 
++        ndimfast *ndimslow elements of elsize bytes each, starting at array. 
++        The elements are signed if elsign is non-zero and unsigned otherwise. 
++        cbf_set_real_image, cbf_set_real_image_fs and cbf_set_real_image_sf 
++        write the image array for element number element_number. The array 
++        consists of ndimfast *ndimslow IEEE double or float elements of 
++        elsize bytes each, starting at array. cbf_set_3d_image, 
++        cbf_set_3d_image_fs and cbf_set_3d_image_sf write the 3D image array 
++        for element number element_number. The array consists of ndimfast 
++        *ndimmid *ndimslow elements of elsize bytes each, starting at array. 
++        The elements are signed if elsign is non-0 and unsigned otherwise. 
++        cbf_set_real_3d_image, cbf_set_real_3d_image_fs and 
++        cbf_set_real_3d_image_sf writes the 3D image array for element number 
++        element_number. The array consists of ndimfast *ndimmid *ndimslow 
++        IEEE double or float elements of elsize bytes each, starting at 
++        array.
++        The _fs calls give the dimensions in a fast-to-slow order. The calls 
++        with no suffix and the calls _sf calls give the dimensions in 
++        slow-to-fast order
++        If the array is 1-dimensional, ndimslow should be the array size and 
++        ndimfast and, for the 3D calls, ndimmid, should be set to 1. If the 
++        array is 2-dimensional and the 3D calls are used, ndimslow and 
++        ndimmid should be used for the array dimensions and ndimfast should 
++        be set to 1.
++        The array will be compressed using the compression scheme specifed by 
++        compression. Currently, the available schemes are:
++        CBF_CANONICAL   Canonical-code compression (section 3.3.1) CBF_PACKED 
++             CCP4-style packing (section 3.3.2) CBF_PACKED_V2     CCP4-style 
++        packing, version 2 (section 3.3.2) CBF_BYTE_OFFSET   Simple  
++        "byte_offset " compression. CBF_NONE        No compression.
++        The values compressed are limited to 64 bits. If any element in the 
++        array is larger than 64 bits, the value compressed is the nearest 
++        64-bit value.
++        Currently, the source array must consist of chars, shorts or ints 
++        (signed or unsigned)for cbf_set_image, or IEEE doubles or floats for 
++        cbf_set_real_image. If elsize is not equal to sizeof (short), sizeof 
++        (int), sizeof(double) or sizeof(float), the function returns 
++        CBF_ARGUMENT.
++        The parameter reserved is presently unused and should be set to 0.
++        ARGUMENTS
++        handle           CBF handle. reserved         Unused. Any value other 
++        than 0 is invalid. element_number   The number of the detector 
++        element counting from 0 by order of appearance in the  
++        "diffrn_data_frame " category. compression      Compression type. 
++        array            Pointer to the image array. elsize           Size in 
++        bytes of each image array element. elsigned         Set to non-0 if 
++        the image array elements are signed. ndimslow         Slowest array 
++        dimension. ndimmid          Second slowest array dimension. ndimfast  
++               Fastest array dimension.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        ----------------------------------------------------------------------
++
++        """
++        return _pycbf.cbf_handle_struct_set_image_sf(self, *args)
++
++    def set_unit_cell(self, *args):
++        """
++        Returns : 
++        *args   : double cell[6]
++
++        C prototype: int cbf_set_unit_cell (cbf_handle handle, double cell[6],
++                         double      cell_esd[6] );
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_unit_cell sets the cell parameters to the double values given 
++        in cell[0:2] for the cell edge lengths a, b and c in AAngstroms, the 
++        double values given in cell[3:5] for the cell angles a, b and g in 
++        degrees, the double values given in cell_esd[0:2] for the estimated 
++        strandard deviations of the cell edge lengths a, b and c in 
++        AAngstroms, and the double values given in cell_esd[3:5] for the 
++        estimated standard deviations of the the cell angles a, b and g in 
++        degrees.
++        The values are placed in the first row of the  "cell " category. If 
++        no value has been given for  "_cell.entry_id ", it is set to the 
++        value of the  "diffrn.id " entry of the current data block.
++        cell or cell_esd may be NULL.
++        If cell is NULL, the cell parameters are not set.
++        If cell_esd is NULL, the cell parameter esds are not set.
++        If the  "cell " category is not present, it is created. If any of 
++        the necessary columns are not present, they are created.
++        ARGUMENTS
++        handle     CBF handle. cell       Pointer to the array of 6 doubles 
++        for the cell parameters. cell_esd   Pointer to the array of 6 doubles 
++        for the cell parameter esds.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_set_unit_cell(self, *args)
++
++    def set_unit_cell_esd(self, *args):
++        """
++        Returns : 
++        *args   : double cell_esd[6]
++
++        C prototype: int cbf_set_unit_cell (cbf_handle handle, double cell[6],
++                         double      cell_esd[6] );
++
++        CBFLib documentation:
++        DESCRIPTION
++        cbf_set_unit_cell sets the cell parameters to the double values given 
++        in cell[0:2] for the cell edge lengths a, b and c in AAngstroms, the 
++        double values given in cell[3:5] for the cell angles a, b and g in 
++        degrees, the double values given in cell_esd[0:2] for the estimated 
++        strandard deviations of the cell edge lengths a, b and c in 
++        AAngstroms, and the double values given in cell_esd[3:5] for the 
++        estimated standard deviations of the the cell angles a, b and g in 
++        degrees.
++        The values are placed in the first row of the  "cell " category. If 
++        no value has been given for  "_cell.entry_id ", it is set to the 
++        value of the  "diffrn.id " entry of the current data block.
++        cell or cell_esd may be NULL.
++        If cell is NULL, the cell parameters are not set.
++        If cell_esd is NULL, the cell parameter esds are not set.
++        If the  "cell " category is not present, it is created. If any of 
++        the necessary columns are not present, they are created.
++        ARGUMENTS
++        handle     CBF handle. cell       Pointer to the array of 6 doubles 
++        for the cell parameters. cell_esd   Pointer to the array of 6 doubles 
++        for the cell parameter esds.
++        RETURN VALUE
++        Returns an error code on failure or 0 for success.
++        SEE ALSO
++
++        """
++        return _pycbf.cbf_handle_struct_set_unit_cell_esd(self, *args)
++
++cbf_handle_struct_swigregister = _pycbf.cbf_handle_struct_swigregister
++cbf_handle_struct_swigregister(cbf_handle_struct)
++
++
++
+diff --git a/cctbx_sources/stdlib.py b/cctbx_sources/stdlib.py
+new file mode 100755
+index 0000000..759f689
+--- /dev/null
++++ b/cctbx_sources/stdlib.py
+@@ -0,0 +1,4 @@
++from libtbx.forward_compatibility import stdlib_import
++
++math = stdlib_import("math")
++random = stdlib_import("random")
+diff --git a/sconsutils.py b/sconsutils.py
 new file mode 100644
-index 0000000..814dce9
+index 0000000..b1667da
+--- /dev/null
++++ b/sconsutils.py
+@@ -0,0 +1,100 @@
++from distutils.command.build_ext import build_ext
++
++import sys, os
++
++BUILDDIR = ''
++configure_list = []
++scons_argv = []
++
++class build_ext(build_ext):
++    def run(self):
++        cwd = os.getcwd()
++        if not os.path.exists(BUILDDIR):
++            os.mkdir(BUILDDIR)
++        elif not os.path.isdir(BUILDDIR):
++            raise RuntimeError(("Build directory '%s' cannot be created "
++                                "because of existing file") % BUILDDIR)
++        os.chdir(BUILDDIR)
++        import libtbx.env_config
++        libtbx.env_config.cold_start(configure_list)
++        argv_save = sys.argv
++        sys.argv = scons_argv
++        import SCons.Script
++        try:
++            SCons.Script.main()
++        except SystemExit, s:
++            # Prevent sys.exit on success.
++            if s.code == 0:
++                pass
++            else:
++                sys.exit(s)
++
++        os.chdir(cwd)
++        for ext in self.extensions:
++            src = ext.sources[0]
++            bld = os.path.join(BUILDDIR, src)
++            dst = self.get_ext_fullpath(ext.name)
++            if os.path.isfile(bld):
++                self.copy_file(bld, dst)
++
++# adapted from setuptools
++# authors: Phillip J. Eby, Tarek Ziade and the distutils SIG
++# licence: PSF or ZPL
++
++from distutils.util import convert_path
++import re
++
++EXTPAT1 = re.compile(r"^from (\S+_ext) import")
++EXTPAT2 = re.compile(r"^import (\S+_ext)$")
++EXTPAT3 = re.compile(r"boost.python.import_ext\(['\"](\S+_ext)['\"]\)$")
++
++def find_packages_and_extensions(where='.', exclude=()):
++    """Return a list all Python packages found within directory 'where'
++    and a list all extensions that need to be installed inside those packages
++
++    'where' should be supplied as a "cross-platform" (i.e. URL-style) path; it
++    will be converted to the appropriate local path syntax.  'exclude' is a
++    sequence of package names to exclude; '*' can be used as a wildcard in the
++    names, such that 'foo.*' will exclude all subpackages of 'foo' (but not
++    'foo' itself).
++    """
++    out = []
++    outext = set()
++    stack=[(convert_path(where), '')]
++
++    while stack:
++
++        where,prefix = stack.pop(0)
++        for name in os.listdir(where):
++
++            fn = os.path.join(where,name)
++            if ('.' not in name and os.path.isdir(fn) and
++                os.path.isfile(os.path.join(fn,'__init__.py'))
++            ):
++
++                out.append(prefix+name); stack.append((fn,prefix+name+'.'))
++
++            if name.endswith('.py'):
++
++                f = open(os.path.join(where, name))
++                for l in f:
++
++                    m = EXTPAT1.match(l)
++                    if m is not None:
++                        outext.add(m.group(1))
++
++                    m = EXTPAT2.match(l)
++                    if m is not None:
++                        outext.add(m.group(1))
++
++                    m = EXTPAT3.search(l)
++                    if m is not None:
++                        outext.add(m.group(1))
++
++                f.close()
++
++    for pat in list(exclude)+['ez_setup', 'distribute_setup']:
++        from fnmatch import fnmatchcase
++        out = [item for item in out if not fnmatchcase(item,pat)]
++
++    return out, list(outext)
+diff --git a/setup.py b/setup.py
+new file mode 100755
+index 0000000..9ea71d6
 --- /dev/null
 +++ b/setup.py
-@@ -0,0 +1,53 @@
-+from setuptools import find_packages, setup
+@@ -0,0 +1,111 @@
++from distutils.core import setup, Extension
++import sconsutils
++from sconsutils import build_ext, find_packages_and_extensions
++import sys, os, shutil
++
++# General settings
++opj = os.path.join
++CURDIR = os.getcwd()
++SRCDIR = opj(CURDIR, 'cctbx_sources/')
++BUILDDIR = opj(CURDIR, 'build%i.%i'%(sys.version_info[0], sys.version_info[1]))
++clipper = 'clipper_adaptbx/clipper'
++boost = 'boost_adaptbx/boost'
++libtbx_pypath = 'libtbx/pythonpath'
++scons_path = '/usr/lib/scons/'
++PATHLIST= [ SRCDIR,
++            opj(SRCDIR, libtbx_pypath),
++            opj(SRCDIR, clipper),
++            opj(SRCDIR, boost),
++            scons_path,
++          ]
++for p in PATHLIST:
++    if p not in sys.path:
++        sys.path.append(p)
++
 +
-+import sys
-+import os
-+import shutil
++# Configure settings
++# We need this directory to get env_config.cold_start to run!
++# trailing slash is important
++init_dir = opj(BUILDDIR, SRCDIR, 'libtbx/')
++build_opts = [ '--libtoolize',
++               '--rpath', '/usr/lib',
++               '--use_system_libs',
++             ]
++conf_modules = [ 'annlib_adaptbx',
++                 'boost_adaptbx',
++                 'cbflib_adaptbx',
++                 'ccp4io_adaptbx',
++                 'cctbx',
++                 'chiltbx',
++                 'clipper_adaptbx',
++                 'crys3d',
++                 'fable',
++                 'fftw3tbx',
++                 'gltbx',
++                 'iotbx',
++                 'libtbx',
++                 'mmtbx',
++                 'omptbx',
++                 'rstbx',
++                 'scitbx',
++                 'smtbx',
++                 'spotfinder',
++                 'tbxx',
++                 'tntbx',
++                 'ucif',
++                 'wxtbx',
++               ]
++sconsutils.configure_list = [init_dir]
++sconsutils.configure_list.extend(build_opts)
++sconsutils.configure_list.extend(conf_modules)
++sconsutils.BUILDDIR = BUILDDIR
++
++# Build settings
++sconsutils.scons_argv = [ sys.argv[0], '-j', '8' ]
++
++# Setup settings
 +
 +NAME = 'cctbx'
 +VERSION = '0.1'
@@ -29,29 +7952,23 @@ index 0000000..814dce9
 +KEYWORDS = 'crystallography'
 +SCRIPTS = []
 +PKG_DATA = {}
-+EXT_MODULES = []
-+EXCLUDE = ['antlr3','cbflib_adaptbx']
 +EXTRA_PATH = 'cctbx'
-+PREFIX = './'
-+SRCDIR = PREFIX + 'cctbx_sources/'
-+PACKS = find_packages(SRCDIR,exclude=EXCLUDE)
++PACKDIR = { 'boost' : SRCDIR + 'boost_adaptbx/boost',
++            'clipper' : SRCDIR + 'clipper_adaptbx/clipper',
++            'optik' : SRCDIR + 'libtbx/pythonpath/optik',
++            'tntbx' : SRCDIR + 'tntbx/tntbx',
++            '' : SRCDIR,
++          }
++
++MODS = ['stdlib', 'pycbf']
++PACKS, EXT_MODULES = find_packages_and_extensions(SRCDIR)
 +PACKS.extend(['boost','clipper','optik','tntbx'])
-+PACKDIR = {'boost' : SRCDIR + 'boost_adaptbx/boost',
-+           'clipper' : SRCDIR + 'clipper_adaptbx/clipper',
-+           'optik' : SRCDIR + 'libtbx/pythonpath/optik',
-+           'tntbx' : SRCDIR + 'tntbx/tntbx',
-+           '' : SRCDIR,}
-+MODS = ['stdlib']
-+MODDIR = {'' : SRCDIR + 'libtbx/pythonpath'}
-+
-+STDLIB_SRC = SRCDIR + 'libtbx/pythonpath/stdlib.py'
-+STDLIB_DEST = SRCDIR + 'stdlib.py'
-+if not os.path.isfile(STDLIB_DEST):
-+  try:
-+      shutil.copy2(STDLIB_SRC, STDLIB_DEST)
-+  except:
-+      print('stdlib.py missing!')
-+      sys.exit(1)
++# This is overlooked by regex in sconsutils
++EXT_MODULES.append('_pycbf')
++
++# TODO: This should also work with Mac OSX and Windows without hard coding the
++# file ext.
++EXT_MODULES = [ Extension(e, ['lib/%s.so'%e]) for e in EXT_MODULES ]
 +
 +setup(name=NAME,
 +      version = VERSION,
@@ -65,5 +7982,8 @@ index 0000000..814dce9
 +      scripts = SCRIPTS,
 +      packages = PACKS,
 +      package_dir = PACKDIR,
-+      py_modules = MODS,)
++      ext_modules = EXT_MODULES,
++      cmdclass = {'build_ext': build_ext},
++      py_modules = MODS,
++     )
 -- 
diff --git a/debian/python-cctbx.install b/debian/python-cctbx.install
new file mode 100644
index 0000000..e2e74a3
--- /dev/null
+++ b/debian/python-cctbx.install
@@ -0,0 +1 @@
+debian/tmp/usr/lib/python2*
diff --git a/debian/rules b/debian/rules
index a4c8a68..cb3e3cc 100755
--- a/debian/rules
+++ b/debian/rules
@@ -23,82 +23,10 @@ SRCDIR          = $(CURDIR)/$(srcdir)
 builddir        = build
 BUILDDIR        = $(CURDIR)/$(builddir)
 
-### BUILD ###
-build: $(PYVERS:%=build-py%)
-	mkdir -p $(CURDIR)/debian/tmp
-	touch $@
-build-py%:
-	mkdir -p $(BUILDDIR)$*
-	cd $(BUILDDIR)$*; python$* $(SRCDIR)/libtbx/configure.py \
-		--libtoolize \
-		--rpath "/usr/lib" \
-		--use_system_libs \
-			annlib_adaptbx \
-			boost_adaptbx \
-			cbflib_adaptbx \
-			ccp4io_adaptbx \
-			cctbx chiltbx \
-			clipper_adaptbx \
-			crys3d fable \
-			fftw3tbx \
-			gltbx iotbx \
-			libtbx \
-			mmtbx \
-			omptbx \
-			rstbx \
-			scitbx \
-			smtbx \
-			spotfinder \
-			tbxx \
-			tntbx \
-			ucif \
-			wxtbx
-	cd $(BUILDDIR)$*;. $(BUILDDIR)$*/setpaths_debug.sh; python$* /usr/bin/scons -j "`./bin/libtbx.show_number_of_processors`"
-	sed -e "s:$(BUILDDIR)$*/lib:/usr/lib/pyshared/python$*:g" \
-		-e "s:$(BUILDDIR)$*/exe:/usr/bin:g" \
-		-e "s:$(BUILDDIR)$*/include:/usr/include:g" \
-		-e "s:$(BUILDDIR)$*:/usr/share/cctbx:g" \
-		-e "s:$(SRCDIR):/usr/share/pyshared:g" \
-		-i $(BUILDDIR)$*/libtbx_env
-	touch $@
+%: 
+	dh $@ --with python2
 
-### INSTALL ###
-install: build
-	touch $@
-
-## CLEAN ###
-clean:
-	dh_testdir
-	dh_testroot
-	rm -f install*
-	rm -rf build*
-	dh_clean
-
-# Build architecture-independent files here.
-binary-indep: clean build install
-	dh_testdir
-	dh_testroot
-	dh_installchangelogs
-	dh_compress
-	dh_fixperms
-	dh_installdeb
-	dh_shlibdeps
-	dh_gencontrol
-	dh_md5sums
-	dh_builddeb
-
-# Build architecture-dependent files here.
-binary-arch: clean build install
-	dh_testdir
-	dh_testroot
-	dh_installchangelogs
-	dh_compress
-	dh_fixperms
-	dh_installdeb
-	dh_shlibdeps
-	dh_gencontrol
-	dh_md5sums
-	dh_builddeb
-
-binary: binary-arch
-.PHONY: build install clean binary-arch binary-indep binary
+override_dh_auto_install:
+	install -d $(CURDIR)/debian/tmp/usr/lib/
+	install $(BUILDDIR)$(PYDEF)/lib/usr/lib/* $(CURDIR)/debian/tmp/usr/lib/
+	dh_auto_install

-- 
Packaging for cctbx



More information about the debian-science-commits mailing list