From c22804d17bc8546fe17c39b7622a044d23870d77 Mon Sep 17 00:00:00 2001
From: Valerio Mariani <valerio.mariani@desy.de>
Date: Mon, 30 Oct 2017 17:23:40 +0100
Subject: [PATCH] Code clean-up

---
 cfel_crystfel.py                            |  56 ++---
 cfel_cxi.py                                 | 145 ++++++-----
 cfel_fabio.py                               |  12 +-
 cfel_geom.py                                |  27 +-
 cfel_hdf5.py                                |   6 +-
 cfel_optarg.py                              |   6 +-
 cfel_psana.py                               |  11 +-
 cfel_vtk.py                                 | 101 ++++++--
 doc/build/doctrees/cfelpyutils.doctree      | Bin 137275 -> 157040 bytes
 doc/build/doctrees/environment.pickle       | Bin 12789 -> 13920 bytes
 doc/build/doctrees/index.doctree            | Bin 4876 -> 4923 bytes
 doc/build/doctrees/modules.doctree          | Bin 2566 -> 2597 bytes
 doc/build/html/.buildinfo                   |   2 +-
 doc/build/html/_static/basic.css            |   9 +-
 doc/build/html/_static/css3-mediaqueries.js |   2 +-
 doc/build/html/_static/doctools.js          |   2 +-
 doc/build/html/_static/pygments.css         |   4 +
 doc/build/html/_static/searchtools.js       |   2 +-
 doc/build/html/_static/websupport.js        |   2 +-
 doc/build/html/cfelpyutils.html             | 257 ++++++++++++++------
 doc/build/html/genindex.html                |  61 ++++-
 doc/build/html/index.html                   |  12 +-
 doc/build/html/modules.html                 |   8 +-
 doc/build/html/objects.inv                  | Bin 647 -> 728 bytes
 doc/build/html/py-modindex.html             |   8 +-
 doc/build/html/search.html                  |   8 +-
 doc/build/html/searchindex.js               |   2 +-
 27 files changed, 461 insertions(+), 282 deletions(-)

diff --git a/cfel_crystfel.py b/cfel_crystfel.py
index 8a87814..9df4d45 100644
--- a/cfel_crystfel.py
+++ b/cfel_crystfel.py
@@ -18,21 +18,19 @@ Utilities for interoperability with the CrystFEL software package.
 This module contains reimplementation of Crystfel functions and utilities.
 """
 
-from __future__ import absolute_import
-from __future__ import division
-from __future__ import print_function
-from __future__ import unicode_literals
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
+import re
 from collections import OrderedDict
 from copy import deepcopy
 from math import sqrt
-import re
 
 
 def _assplode_algebraic(value):
     items = [item for item in re.split('([+-])', value.strip()) if item != '']
 
-    if len(items) != 0 and items[0] not in ('+', '-'):
+    if items and items[0] not in ('+', '-'):
         items.insert(0, '+')
 
     return [''.join((items[x], items[x + 1])) for x in range(0, len(items), 2)]
@@ -43,7 +41,7 @@ def _dir_conv(direction_x, direction_y, direction_z, value):
 
     items = _assplode_algebraic(value)
 
-    if len(items) == 0:
+    if items:
         raise RuntimeError('Invalid direction: {}.'.format(value))
 
     for item in items:
@@ -78,7 +76,7 @@ def _set_dim_structure_entry(key, value, panel):
     dim_index = int(key[3])
 
     if dim_index > len(dim) - 1:
-        for index in range(len(dim), dim_index + 1):
+        for _ in range(len(dim), dim_index + 1):
             dim.append(None)
 
     if value == 'ss' or value == 'fs' or value == '%':
@@ -331,21 +329,20 @@ def _find_min_max_d(detector):
 
 def load_crystfel_geometry(filename):
     """Loads a CrystFEL geometry file into a dictionary.
-    
+
     Reimplements the get_detector_geometry_2 function from CrystFEL amost verbatim. Returns a dictionary with the
     geometry information. Entries in the geometry file appears as keys in the returned dictionary. For a full
     documentation on the CrystFEL geometry format, see:
-    
+
     tfel/manual-crystfel_geometry.html
-    
+
     Args:
-        
+
         filename (str): filename of the geometry file
-        
+
     Returns:
-        
+
         detector (dict): dictionary with the geometry loaded from the file
-    
     """
 
     fh = open(filename, 'r')
@@ -460,7 +457,7 @@ def load_crystfel_geometry(filename):
         else:
             _parse_field_bad(path[1], value, curr_bad)
 
-    if len(detector['panels']) == 0:
+    if not detector['panels']:
         raise RuntimeError("No panel descriptions in geometry file.")
 
     num_placeholders_in_panels = None
@@ -534,26 +531,23 @@ def load_crystfel_geometry(filename):
         if dim_length == 1:
             raise RuntimeError('Number of dim coordinates must be at least two.')
 
-    for panel_name, panel in detector['panels'].items():
+    for panel in detector['panels'].values():
 
-        if 'origin_min_fs' not in panel:
-            raise RuntimeError('Please specify the minimum fs coordinate for panel {}.'.format(panel_name))
+        if panel['origin_min_fs'] < 0:
+            raise RuntimeError('Please specify the minimum fs coordinate for panel {}.'.format(panel['name']))
 
-        if 'origin_max_fs' not in panel:
-            raise RuntimeError('Please specify the maximum fs coordinate for panel {}.'.format(panel_name))
+        if panel['origin_max_fs'] < 0:
+            raise RuntimeError('Please specify the maximum fs coordinate for panel {}.'.format(panel['name']))
 
-        if 'origin_min_ss' not in panel:
-            raise RuntimeError('Please specify the minimum ss coordinate for panel {}.'.format(panel_name))
+        if panel['origin_min_ss'] < 0:
+            raise RuntimeError('Please specify the minimum ss coordinate for panel {}.'.format(panel['name']))
 
-        if 'origin_max_ss' not in panel:
-            raise RuntimeError('Please specify the maximum ss coordinate for panel {}.'.format(panel_name))
+        if panel['origin_max_ss'] < 0:
+            raise RuntimeError('Please specify the maximum ss coordinate for panel {}.'.format(panel['name']))
 
         if panel['cnx'] is None:
-            raise RuntimeError('Please specify the corner X coordinate for panel {}.'.format(panel_name))
+            raise RuntimeError('Please specify the corner X coordinate for panel {}.'.format(panel['name']))
 
-        if panel['cny'] is None:
-            raise RuntimeError('Please specify the corner Y coordinate for panel {}.'.format(panel_name))
-        
         if panel['clen'] is None and panel['clen_from'] is None:
             raise RuntimeError('Please specify the camera length for panel {}.'.format(panel['name']))
 
@@ -583,12 +577,12 @@ def load_crystfel_geometry(filename):
         if bad_region['is_fsss'] == 99:
             raise RuntimeError('Please specify the coordinate ranges for bad region {}.'.format(bad_region['name']))
 
-    for group in detector['rigid_groups'].keys():
+    for group in detector['rigid_groups']:
         for name in detector['rigid_groups'][group]:
             if name not in detector['panels']:
                 raise RuntimeError('Cannot add panel to rigid_group. Panel not found: {}'.format(name))
 
-    for group_collection in detector['rigid_group_collections'].keys():
+    for group_collection in detector['rigid_group_collections']:
         for name in detector['rigid_group_collections'][group_collection]:
             if name not in detector['rigid_groups']:
                 raise RuntimeError('Cannot add rigid_group to collection. Rigid group not found: {}'.format(name))
diff --git a/cfel_cxi.py b/cfel_cxi.py
index 5a2293e..99d36b4 100644
--- a/cfel_cxi.py
+++ b/cfel_cxi.py
@@ -15,20 +15,20 @@
 """
 Utilities for writing multi-event files in the CXIDB format.
 
-This module contains utilities to write files that adhere to the CXIDB file format: 
+This module contains utilities to write files that adhere to the CXIDB file format:
 
 http://www.cxidb.org/cxi.html .
 """
 
-from __future__ import absolute_import
-from __future__ import division
-from __future__ import print_function
-from __future__ import unicode_literals
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
 from collections import namedtuple
+
 import h5py
 import numpy
 
+
 _CXISimpleEntry = namedtuple('SimpleEntry', ['path', 'data', 'overwrite'])
 
 
@@ -64,11 +64,7 @@ class _Stack:
             self._chunk_size = chunk_size
 
     def is_there_data_to_write(self):
-
-        if self._data_to_write is not None:
-            return True
-        else:
-            return False
+        return self._data_to_write is not None
 
     def write_initial_slice(self, file_handle, max_num_slices):
 
@@ -132,27 +128,27 @@ class CXIWriter:
     """Writing of multi-event CXIDB files.
 
     Implements a simple low-level CXIDB file format writer for multi event files. it allows the user to write data
-    "stacks" in the CXIDB files, making sure that the entries in all stacks are synchronized. 
-    
+    "stacks" in the CXIDB files, making sure that the entries in all stacks are synchronized.
+
     A CXI Writer instance manages one file. A user can add a stack to a CXI Writer instance with the
-    add_stack_to_writer function, which also writes the first entry in the stack. The user can then add to the writer 
+    add_stack_to_writer function, which also writes the first entry in the stack. The user can then add to the writer
     all the stacks that he wants in the file. Once all stacks are added, the user initializes them  with the
     initialize_stacks function. After initialization, no more stacks can be added. Instead, entries can be appended to
-    the existing stacks, using the append_data_to_stack function. 
-    
+    the existing stacks, using the append_data_to_stack function.
+
     A "slice" (a set of synced entries in all the stacks in the file) can be written to the a file only after an entry
     has been appended to all stacks in the file. Conversely, after an entry has been appended to a stack, the user
     cannot append another entry before a slice is written. This ensures synchronization of the data in all the stacks.
-    
+
     A file can be closed at any time. In any case, the writer will not allow a file to contain more than the
     number_of_entries specified during instantiation.
-    
+
     Simple non-stack entries can be written to the file at any time, before or after stack initialization (provided of
     course that the file is open). Entries and stacks will general never be overwritten unless the overwrite parameter
     is set to True.
-    
+
     Example of usage of the stack API:
-    
+
     c1 = 0
     c2 = 0
 
@@ -197,13 +193,13 @@ class CXIWriter:
 
     def __init__(self, filename, max_num_slices=5000):
         """Instantiates a CXI Writer, managing one file.
-        
+
         Instantiates a CXI Writer, responsible for writing data into one file.
-        
+
         Args:
-            
+
             filename (str): name of the file managed by the CXI Writer
-            
+
             max_num_slices (int): maximum number of slices for the stacks in the file (default 5000)
         """
 
@@ -236,31 +232,31 @@ class CXIWriter:
     def add_stack_to_writer(self, name, path, initial_data, axes=None, compression=True, chunk_size=None,
                             overwrite=True):
         """Adds a new stack to the file.
-        
+
         Adds a new stack to the CXI Writer instance. The user must provide a name for the stack, that will identify
         the stack in all subsequents operations. The user must also provide the data that will be written as the
         initial entry in the stack (initial_data). This initial entry is used to set the size and type of data that the
         stack will hold and these parameters are in turn be used to validate all data that is subsequently appended to
         the stack.
-        
+
         Args:
-            
+
             name (str): stack name.
-            
+
             path (str): path in the hdf5 file where the stack will be written.
-            
-            initial_data (Union[numpy.ndarray, bytes, int, float]: initial entry in the stack. It gets written to the 
+
+            initial_data (Union[numpy.ndarray, bytes, int, float]: initial entry in the stack. It gets written to the
             stack as slice 0. Its characteristics are used to validate all data subsequently appended to the stack.
-            
+
             axes (bytes): the 'axes' attribute for the stack, as defined by the CXIDB file format.
-            
+
             compression (Union[None, bool,str]): compression parameter for the stack. This parameters works in the same
             way as the normal compression parameter from h5py. The default value of this parameter is True.
-            
+
             chunk_size (Union[None, tuple]): HDF5 chuck size for the stack. If this parameter is set to None, the
-            CXI writer will compute a chuck size automatically (this is the default behavior). Otherwise, the writer 
+            CXI writer will compute a chuck size automatically (this is the default behavior). Otherwise, the writer
             will use the provided tuple to set the chunk size.
-            
+
             overwrite (bool): if set to True, a stack already existing at the same location will be overwritten. If set
             to False, an attempt to overwrite a stack will raise an error.
         """
@@ -276,7 +272,7 @@ class CXIWriter:
         for entry in self._cxi_stacks:
             if path == self._cxi_stacks[entry].path:
                 if overwrite is True:
-                    del (self._cxi_stacks[entry])
+                    del self._cxi_stacks[entry]
                 else:
                     raise RuntimeError('Cannot write the entry. Data is already present at the specified path.')
 
@@ -285,19 +281,19 @@ class CXIWriter:
 
     def write_simple_entry(self, name, path, data, overwrite=False):
         """Writes a simple, non-stack entry in the file.
-        
+
         Writes a simple, non-stack entry in the file, at the specified path. A simple entry can be written at all times,
         before or after the stack initialization. The user must provide a name that identifies the entry for further
         operations (for example, creating a link).
-        
+
         Args:
-        
+
             name (str): entry name
-        
+
             path (str): path in the hdf5 file where the entry will be written.
-            
+
             data (Union[numpy.ndarray, bytes, int, float]): data to write
-            
+
             overwrite (bool): if set to True, an entry already existing at the same location will be overwritten. If set
             to False, an attempt to overwrite an entry will raise an error.
         """
@@ -309,7 +305,7 @@ class CXIWriter:
 
         if path in self._fh:
             if overwrite is True:
-                del (self._fh[path])
+                del self._fh[path]
             else:
                 raise RuntimeError('Cannot create the the entry. An entry already exists at the specified path.')
 
@@ -324,24 +320,24 @@ class CXIWriter:
 
     def create_link(self, name, path, overwrite=False):
         """Creates a link to a stack or entry.
-         
+
         Creates a link in the file, at the path specified, pointing to the stack or the entry identified by the
         provided name. If a link or entry already exists at the specified path, it is deleted and replaced only if the
         value of the overwrite parameter is True.
-         
+
         Args:
-             
+
             name (str): name of the stack or entry to which the link points.
-        
+
             path (str): path in the hdf5 where the link is created.
-             
+
             overwrite (bool): if set to True, an entry already existing at the same location will be overwritten. If set
             to False, an attempt to overwrite an entry will raise an error.
         """
 
         if path in self._fh:
             if overwrite is True:
-                del (self._fh[path])
+                del self._fh[path]
             else:
                 raise RuntimeError('Cannot create the link. An entry already exists at the specified path.')
 
@@ -357,23 +353,23 @@ class CXIWriter:
 
     def create_link_to_group(self, group, path, overwrite=False):
         """Creates a link to an HDF5 group.
-        
+
         Creates a link to an HDF5 group (as opposed to a simple entry or stack). If a link or entry already exists at
         the specified path, it is deleted and replaced only if the value of the overwrite parameter is True.
 
-        Args: 
+        Args:
 
             group (str): internal HDF5 path of the group to which the link points.
-        
+
             path (str): path in the hdf5 where the link is created.
-             
+
             overwrite (bool): if set to True, an entry already existing at the same location will be overwritten. If set
             to False, an attempt to overwrite an entry will raise an error.
         """
 
         if path in self._fh:
             if overwrite is True:
-                del (self._fh[path])
+                del self._fh[path]
             else:
                 raise RuntimeError('Cannot create the link. An entry already exists at the specified path.')
 
@@ -411,8 +407,8 @@ class CXIWriter:
 
     def initialize_stacks(self):
         """Initializes the stacks.
-        
-        Initializes the stacks in the CXI Writer instance. This fixes the number and type of stacks in the file. No 
+
+        Initializes the stacks in the CXI Writer instance. This fixes the number and type of stacks in the file. No
         stacks can be added to the CXI Writer after initialization.
         """
 
@@ -435,15 +431,15 @@ class CXIWriter:
 
     def append_data_to_stack(self, name, data):
         """Appends data to a stack.
-        
+
         Appends data to a stack, validating the data to make sure that the data type and size match the previous entries
         in the stack. Only one entry can be appended to each stack before writing a slice across all stacks with
         the write_slice_and_increment.
-        
+
         Args:
-            
+
             name (str): stack name, defining the stack to which the data will be appended.
-            
+
             data (Union[numpy.ndarray, bytes, int, float]: data to write. The data will be validated against the type
             and size of previous entries in the stack.
         """
@@ -463,10 +459,10 @@ class CXIWriter:
 
     def write_stack_slice_and_increment(self):
         """Writes a slice across all stacks and resets the writer for the next slice.
-        
+
         Writes a slice across all stacks in the file. It checks that an entry has been appended to each stack, and
         writes all the entries on top of the relevant stacks in one go. If an entry is missing in a stack, the function
-        will raise an error. After writing the slice, the function resets the writer to allow again appending data to 
+        will raise an error. After writing the slice, the function resets the writer to allow again appending data to
         the stacks.
         """
 
@@ -491,12 +487,12 @@ class CXIWriter:
 
     def get_file_handle(self):
         """Access to the naked h5py file handle.
-        
+
         This function allows access to the a naked h5py handle for the file managed by the CXI Writer. This allowa
         operations on the file that are not covered by  CXI Writer API. Use it at your own risk.
-        
+
         Returns:
-            
+
             fh (h5py.File): an h5py file handle to the file managed by the writer.
         """
 
@@ -507,11 +503,11 @@ class CXIWriter:
 
     def stacks_are_initialized(self):
         """Checks if stacks are initialized.
-        
+
         Checks the status of the stacks in the file and returns the status to the user.
-        
+
         Returns:
-            
+
             status (bool): True if the stacks are initialized, False otherwise
         """
 
@@ -533,21 +529,16 @@ class CXIWriter:
 
         """
 
-        if path in self._fh:
-            ret = True
-        else:
-            ret = False
-
-        return ret
+        return path in self._fh
 
     def file_is_full(self):
         """Checks if the file is full.
-        
+
         Checks if the file is full (i.e. the maximum number of slices have already been written), and returns the
         information to the user.
-        
+
         Returns:
-            
+
             status (bool): True if the file is full, False otherwise.
         """
 
@@ -569,7 +560,7 @@ class CXIWriter:
 
     def close_file(self):
         """Closes the file.
-        
+
         Closes the file for writing, ending all writing operations.
         """
 
diff --git a/cfel_fabio.py b/cfel_fabio.py
index 9785064..eac468b 100644
--- a/cfel_fabio.py
+++ b/cfel_fabio.py
@@ -19,13 +19,11 @@ This module contains utilities based on the fabio python module.
 files.
 """
 
-from __future__ import absolute_import
-from __future__ import division
-from __future__ import print_function
-from __future__ import unicode_literals
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
-import numpy
 import fabio.cbfimage
+import numpy
 
 
 def read_cbf_from_stream(stream):
@@ -58,8 +56,8 @@ def read_cbf_from_stream(stream):
             print("%s: %s" % kv)
         raise RuntimeError(err)
     if cbf_obj.cif[cbf_obj.CIF_BINARY_BLOCK_KEY] == "CIF Binary Section":
-        cbf_obj.cbs += infile.read(len(cbf_obj.STARTER) + int(cbf_obj.header["X-Binary-Size"])
-                                   - len(cbf_obj.cbs) + cbf_obj.start_binary)
+        cbf_obj.cbs += infile.read(len(cbf_obj.STARTER) + int(cbf_obj.header["X-Binary-Size"]) -
+                                   len(cbf_obj.cbs) + cbf_obj.start_binary)
     else:
         if len(cbf_obj.cif[cbf_obj.CIF_BINARY_BLOCK_KEY]) > int(
                 cbf_obj.header["X-Binary-Size"]) + cbf_obj.start_binary + len(cbf_obj.STARTER):
diff --git a/cfel_geom.py b/cfel_geom.py
index 4048220..4a86482 100644
--- a/cfel_geom.py
+++ b/cfel_geom.py
@@ -19,12 +19,11 @@ This module contains utilities for the processing of CrystFEL-style geometry
 files.
 """
 
-from __future__ import absolute_import
-from __future__ import division
-from __future__ import print_function
-from __future__ import unicode_literals
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
 from collections import namedtuple
+
 import numpy
 
 from cfelpyutils.cfel_crystfel import load_crystfel_geometry
@@ -34,7 +33,6 @@ ImageShape = namedtuple('ImageShape', ['ss', 'fs'])
 
 
 def _find_minimum_image_shape(x, y):
-
     # find the smallest size of cspad_geom that contains all
     # xy values but is symmetric about the origin
     n = 2 * int(max(abs(y.max()), abs(y.min()))) + 2
@@ -42,6 +40,7 @@ def _find_minimum_image_shape(x, y):
 
     return n, m
 
+
 def apply_geometry_from_file(data_as_slab, geometry_filename):
     """Parses a geometry file and applies the geometry to data.
 
@@ -61,7 +60,7 @@ def apply_geometry_from_file(data_as_slab, geometry_filename):
         detector, with the origin of the  reference system at the beam interaction point.
     """
 
-    x, y, slab_shape, img_shape = pixel_maps_for_image_view(geometry_filename)
+    x, y, _, img_shape = pixel_maps_for_image_view(geometry_filename)
     im_out = numpy.zeros(img_shape, dtype=data_as_slab.dtype)
 
     im_out[y, x] = data_as_slab.ravel()
@@ -136,7 +135,7 @@ def pixel_maps_for_image_view(geometry_filename):
 
 def get_image_shape(geometry_filename):
     """Parses a geometry file and returns the minimum size of an image that can represent the detector.
-    
+
     Parses the geometry file and return a numpy shape object representing the minimum size of an image that
     can contain the physical representation of the detector. The representation is centered at the point where the beam
     hits the detector according to the geometry in the file.
@@ -160,8 +159,6 @@ def get_image_shape(geometry_filename):
     return img_shape
 
 
-
-
 def pixel_maps_from_geometry_file(fnam):
     """Parses a geometry file and creates pixel maps.
 
@@ -189,17 +186,19 @@ def pixel_maps_from_geometry_file(fnam):
 
     for p in detector['panels']:
         # get the pixel coords for this asic
-        i, j = numpy.meshgrid(numpy.arange(detector['panels'][p]['max_ss'] - detector['panels'][p]['min_ss'] + 1),
-                              numpy.arange(detector['panels'][p]['max_fs'] - detector['panels'][p]['min_fs'] + 1),
-                              indexing='ij')
+        i, j = numpy.meshgrid(
+            numpy.arange(detector['panels'][p]['max_ss'] - detector['panels'][p]['min_ss'] + 1),
+            numpy.arange(detector['panels'][p]['max_fs'] - detector['panels'][p]['min_fs'] + 1),
+            indexing='ij'
+        )
 
         # make the y-x ( ss, fs ) vectors, using complex notation
         dx = detector['panels'][p]['fsy'] + 1J * detector['panels'][p]['fsx']
         dy = detector['panels'][p]['ssy'] + 1J * detector['panels'][p]['ssx']
         r_0 = detector['panels'][p]['cny'] + 1J * detector['panels'][p]['cnx']
-        #
+
         r = i * dy + j * dx + r_0
-        #
+
         y[detector['panels'][p]['min_ss']: detector['panels'][p]['max_ss'] + 1,
           detector['panels'][p]['min_fs']: detector['panels'][p]['max_fs'] + 1] = r.real
 
diff --git a/cfel_hdf5.py b/cfel_hdf5.py
index e961a66..5daeb79 100644
--- a/cfel_hdf5.py
+++ b/cfel_hdf5.py
@@ -19,10 +19,8 @@ This module contains utilities for the processing of HDF5. This module builds
 on what the h5py module already provides.
 """
 
-from __future__ import absolute_import
-from __future__ import division
-from __future__ import print_function
-from __future__ import unicode_literals
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
 import h5py
 import numpy
diff --git a/cfel_optarg.py b/cfel_optarg.py
index 0521687..f85245f 100644
--- a/cfel_optarg.py
+++ b/cfel_optarg.py
@@ -19,10 +19,8 @@ This module contains utilities for parsing of command line options and
 configuration files.
 """
 
-from __future__ import absolute_import
-from __future__ import division
-from __future__ import print_function
-from __future__ import unicode_literals
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
 import ast
 
diff --git a/cfel_psana.py b/cfel_psana.py
index f17d8e9..736db61 100644
--- a/cfel_psana.py
+++ b/cfel_psana.py
@@ -12,19 +12,14 @@
 #
 #    You should have received a copy of the GNU General Public License
 #    along with cfelpyutils.  If not, see <http://www.gnu.org/licenses/>.
-
-
 """
 Utilities based on the psana python module.
 
 This module provides utilities that build on the functionality provided by the psana python module.
 """
 
-
-from __future__ import absolute_import
-from __future__ import division
-from __future__ import print_function
-from __future__ import unicode_literals
+from __future__ import (absolute_import, division, print_function,
+                        unicode_literals)
 
 
 def psana_obj_from_string(name):
@@ -112,7 +107,7 @@ def dirname_from_source_runs(source):
         stop = len(source)
     runs = source[start:stop]
     nums = runs.split(',')
-    if len(nums) == 0:
+    if not nums:
         nums = runs
     dirname = 'run_' + '_'.join(nums)
     return dirname
diff --git a/cfel_vtk.py b/cfel_vtk.py
index f562d04..a2726e2 100644
--- a/cfel_vtk.py
+++ b/cfel_vtk.py
@@ -15,9 +15,13 @@
 """
 Utilities for 3d data visualization using the Visualization Toolkit (VTK).
 """
+
+
 import numpy
+
 import vtk
 
+
 VTK_VERSION = vtk.vtkVersion().GetVTKMajorVersion()
 
 
@@ -25,14 +29,20 @@ def get_lookup_table(minimum_value, maximum_value, log=False, colorscale="jet",
     """Create a vtkLookupTable with a specified range, and colorscale.
 
     Args:
+
         minimum_value (float): Lowest value the lookup table can display, lower values will be displayed as this value
+
         maximum_value (float): Highest value the lookup table can display, higher values will be displayed as this value
+
         log (Optional[bool]): True if the scale is logarithmic
+
         colorscale (Optional[string]): Accepts the name of any matplotlib colorscale. The lookuptable will
             replicate this scale.
+
         number_of_colors (Optional[int]): The length of the table. Higher values corresponds to a smoother color scale.
 
     Returns:
+
         lookup_table (vtk.vtkLookupTable): A vtk lookup table
     """
 
@@ -58,13 +68,17 @@ def array_to_float_array(array_in, dtype=None):
     This flattens the array and thus the shape is lost.
 
     Args:
+
         array_in (numpy.ndarray): The array to convert.
+
         dtype (Optional[type]): Optionaly convert the array to the specified data. Otherwise the original
-            type will be preserved.
+        type will be preserved.
 
     Returns:
+
         float_array (vtk.vtkFloatArray): A float array of the specified type.
     """
+
     if dtype is None:
         dtype = array_in.dtype
     if dtype == "float32":
@@ -87,13 +101,17 @@ def array_to_vtk(array_in, dtype=None):
     """Convert a numpy array into a vtk array of the specified type. This flattens the array and thus the shape is lost.
 
     Args:
+
         array_in (numpy.ndarray): The array to convert.
+
         dtype (Optional[type]): Optionaly convert the array to the specified data. Otherwise the original type
-            will be preserved.
+        will be preserved.
 
     Returns:
+
         vtk_array (vtk.vtkFloatArray): A float array of the specified type.
     """
+
     if dtype is None:
         dtype = numpy.dtype(array_in.dtype)
     else:
@@ -119,13 +137,17 @@ def array_to_image_data(array_in, dtype=None):
     """Convert a numpy array to vtkImageData. Image data is a 3D object, thus the input must be 3D.
 
     Args:
+
         array_in (numpy.ndarray): Array to convert to vtkImageData. Must be 3D.
+
         dtype (Optional[type]): Optionaly convert the array to the specified data. Otherwise the original
-            type will be preserved.
+        type will be preserved.
 
     Returns:
+
         image_data (vtk.vtkImageData): Image data containing the data from the array.
     """
+
     if len(array_in.shape) != 3:
         raise ValueError("Array must be 3D for conversion to vtkImageData")
     array_flat = array_in.flatten()
@@ -140,10 +162,14 @@ def window_to_png(render_window, file_name, magnification=1):
     """Take a screen shot of a specific vt render window and save it to file.
 
     Args:
+
         render_window (vtk.vtkRenderWindow): The render window window to capture.
+
         file_name (string): A png file with this name will be created from the provided window.
+
         magnification (Optional[int]): Increase the resolution of the output file by this factor
     """
+
     magnification = int(magnification)
     window_to_image_filter = vtk.vtkWindowToImageFilter()
     window_to_image_filter.SetInput(render_window)
@@ -162,12 +188,16 @@ def poly_data_to_actor(poly_data, lut):
     using a very basic vtkMapper
 
     Args:
+
         poly_data (vtk.vtkPolyData): vtkPolyData object.
+
         lut (vtk.vtkLookupTable): The vtkLookupTable specifies the colorscale to use for the maper.
 
     Returns:
+
         actor (vtk.vtkActor): Actor to display the provided vtkPolyData
     """
+
     mapper = vtk.vtkPolyDataMapper()
     mapper.SetInputData(poly_data)
     mapper.SetLookupTable(lut)
@@ -181,9 +211,12 @@ class IsoSurface(object):
     """Create and plot isosurfaces.
 
     Args:
+
         volume (numpy.ndimage): 3D floating point array.
+
         level (float or list of float): The threshold level for the isosurface, or a list of such levels.
     """
+
     def __init__(self, volume, level=None):
         self._surface_algorithm = None
         self._renderer = None
@@ -216,8 +249,10 @@ class IsoSurface(object):
         """Create the numpy array self._volume_array and vtk array self._float_array and make them share data.
 
         Args:
+
             volume (numpy.ndimage): This data will populate both the created numpy and vtk objects.
         """
+
         self._volume_array = numpy.zeros(volume.shape, dtype="float32", order="C")
         self._volume_array[:] = volume
         self._float_array.SetNumberOfValues(numpy.product(volume.shape))
@@ -229,8 +264,10 @@ class IsoSurface(object):
         """Set the renderer of the isosurface and remove any existing renderer.
 
         Args:
+
             renderer (vtk.vtkRenderer): Give this renderer controll over all the surface actors.
         """
+
         if self._actor is None:
             raise RuntimeError("Actor does not exist.")
         if self._renderer is not None:
@@ -242,8 +279,10 @@ class IsoSurface(object):
         """Remova any current surface levels and add the ones from the provided list.
 
         Args:
+
             levels (list of float): Levels for the isosurface, in absolute values (not e.g. ratios)
         """
+
         self._surface_algorithm.SetNumberOfContours(0)
         for index, this_level in enumerate(levels):
             self._surface_algorithm.SetValue(index, this_level)
@@ -253,8 +292,10 @@ class IsoSurface(object):
         """Return a list of the current surface levels.
 
         Returns:
+
             levels (list of floats): The current surface levels.
         """
+
         return [self._surface_algorithm.GetValue(index)
                 for index in range(self._surface_algorithm.GetNumberOfContours())]
 
@@ -262,8 +303,10 @@ class IsoSurface(object):
         """Add a single surface level.
 
         Args:
+
             level (float): The level of the new surface.
         """
+
         self._surface_algorithm.SetValue(self._surface_algorithm.GetNumberOfContours(), level)
         self._render()
 
@@ -271,11 +314,13 @@ class IsoSurface(object):
         """Remove a singel surface level at the provided index.
 
         Args:
+
             index (int): The index of the level. If levels were added one by one this corresponds
-                to the order in which they were added.
+            to the order in which they were added.
         """
-        for index in range(index, self._surface_algorithm.GetNumberOfContours()-1):
-            self._surface_algorithm.SetValue(index, self._surface_algorithm.GetValue(index+1))
+
+        for idx in range(index, self._surface_algorithm.GetNumberOfContours()-1):
+            self._surface_algorithm.SetValue(idx, self._surface_algorithm.GetValue(idx+1))
         self._surface_algorithm.SetNumberOfContours(self._surface_algorithm.GetNumberOfContours()-1)
         self._render()
 
@@ -287,15 +332,19 @@ class IsoSurface(object):
                 the order in which they were added.
             level (float): The new level of the surface.
         """
+
         self._surface_algorithm.SetValue(index, level)
         self._render()
 
     def set_cmap(self, cmap):
-        """Set the colormap. The color is a function of surface level and mainly of relevance when plotting multiple surfaces.
+        """Set the colormap. The color is a function of surface level and mainly of relevance when plotting multiple
+        surfaces.
 
         Args:
+
             cmap (string): Name of the colormap to use. Supports all colormaps provided by matplotlib.
         """
+
         self._mapper.ScalarVisibilityOn()
         self._mapper.SetLookupTable(get_lookup_table(self._volume_array.min(), self._volume_array.max(),
                                                      colorscale=cmap))
@@ -305,8 +354,10 @@ class IsoSurface(object):
         """Plot all surfaces in this provided color.
 
         Args:
+
             color (length 3 iterable): The RGB value of the color.
         """
+
         self._mapper.ScalarVisibilityOff()
         self._actor.GetProperty().SetColor(color[0], color[1], color[2])
         self._render()
@@ -315,13 +366,16 @@ class IsoSurface(object):
         """Set the opacity of all surfaces. (seting it individually for each surface is not supported)
 
         Args:
+
             opacity (float): Value between 0. and 1. where 0. is completely transparent and 1. is completely opaque.
         """
+
         self._actor.GetProperty().SetOpacity(opacity)
         self._render()
 
     def _render(self):
         """Render if a renderer is set, otherwise do nothing."""
+
         if self._renderer is not None:
             self._renderer.GetRenderWindow().Render()
 
@@ -329,7 +383,9 @@ class IsoSurface(object):
         """Change the data displayed.
 
         Args:
+
             volume (numpy.ndarray): The new array. Must have the same shape as the old array."""
+
         if volume.shape != self._volume_array.shape:
             raise ValueError("New volume must be the same shape as the old one")
         self._volume_array[:] = volume
@@ -341,8 +397,11 @@ def plot_isosurface(volume, level=None, opacity=1.):
     """Plot isosurfaces of the provided module.
 
     Args:
+
         volume (numpy.ndarray): The 3D numpy array that will be plotted.
+
         level (float or list of floats): Levels can be iterable or singel value.
+
         opacity (float): Float between 0. and 1. where 0. is completely transparent and 1. is completely opaque.
     """
 
@@ -371,10 +430,14 @@ def plot_planes(array_in, log=False, cmap=None):
     """Plot the volume at two interactive planes that cut the volume.
 
     Args:
+
         array_in (numpy.ndarray): Input array must be 3D.
+
         log (bool): If true the data will be plotted in logarithmic scale.
+
         cmap (string): Name of the colormap to use. Supports all colormaps provided by matplotlib.
     """
+
     array_in = numpy.float64(array_in)
     renderer = vtk.vtkRenderer()
     render_window = vtk.vtkRenderWindow()
@@ -429,14 +492,20 @@ def setup_window(size=(400, 400), background=(1., 1., 1.)):
     """Create a renderer, render_window and interactor and setup connections between them.
 
     Args:
+
         size (Optional[length 2 iterable of int]): The size of the window in pixels.
+
         background (Optional[length 3 iterable of float]): RGB value of the background color.
 
     Returns:
+
         renderer (vtk.vtkRenderer): A standard renderer connected to the window.
+
         render_window (vtk.vtkRenderWindow): With dimensions given in the arguments, or oterwise 400x400 pixels.
+
         interactor (vtk.vtkRenderWindowInteractor): The interactor will be given the rubber band pick interactor style.
     """
+
     renderer = vtk.vtkRenderer()
     render_window = vtk.vtkRenderWindow()
     render_window.AddRenderer(renderer)
@@ -452,24 +521,24 @@ def setup_window(size=(400, 400), background=(1., 1., 1.)):
     return renderer, render_window, interactor
 
 
-def scatterplot_3d(data, color=None, point_size=None, cmap="jet", point_shape=None):
+def scatterplot_3d(data, color=None, point_size=None, point_shape=None):
     """3D scatter plot.
 
     Args:
+
         data (numpy.ndimage): The array must have shape Nx3 where N is the number of points.
 
         color (Optional[numpy.ndimage]): 1D Array of floating points with same length as the data array.
-            These numbers give the color of each point.
-            
+        These numbers give the color of each point.
+
         point_size (Optional[float]): The size of each points. Behaves differently depending on the point_shape.
-            If shape is spheres the size is relative to the scene and if squares the size is relative to the window.
-            
-        cmap (Optional[str]): Color map
-        
+        If shape is spheres the size is relative to the scene and if squares the size is relative to the window.
+
         point_shape (Optional["spheres" or "squares"]): "spheres" plots each point as a sphere, recommended for
-            small data sets. "squares" plot each point as a square without any 3D structure, recommended for
-            large data sets.
+        small data sets. "squares" plot each point as a square without any 3D structure, recommended for
+        large data sets.
     """
+
     if len(data.shape) != 2 or data.shape[1] != 3:
         raise ValueError("data must have shape (n, 3) where n is the number of points.")
     if point_shape is None:
diff --git a/doc/build/doctrees/cfelpyutils.doctree b/doc/build/doctrees/cfelpyutils.doctree
index a41051f8809eafee804847961801c5089599379d..5fce9a4c8fbd504c632809e2236a786e14a3748d 100644
GIT binary patch
literal 157040
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
Y9D9AVe$8&o&<r{2(yt};>rGAkKc&A06951J

literal 137275
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

diff --git a/doc/build/doctrees/environment.pickle b/doc/build/doctrees/environment.pickle
index 28a677e6662fda797590dfab93a4c446cbe70796..a4ed16141619c2a0bb75154cd86c47aadef2da2a 100644
GIT binary patch
literal 13920
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
Kk>e;2)c+5Da2nSD

literal 12789
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
Ao&W#<

diff --git a/doc/build/doctrees/index.doctree b/doc/build/doctrees/index.doctree
index 9db84027a9f779c6ec4bde99bfe5912fdacdd3ee..f5d0ebcaece3d183b097316574c19a550ef50061 100644
GIT binary patch
delta 735
zcmeBC+pWgZz%tcfBg-l#85jMG{M=OivfRX?%*4D*{qX#vZ2h3r-29SMg~|Jvrb}st
zr{*LBl_-?tD<r3-<`h(xmSpA>KWdmcIhR?1H-j;QIYZSiL*1`5DRFWmi{#{$%rRI*
zXK?aN)@6CMS(Vk0QK&9MG@}MXCueDfN`@{_s&aAzTL$Cg$uHRyfFu{Y6p&P9muH+m
z*_GXrbuLiFtjT<wmW-<=?`3xon318Hp_ZZUEesT&3UdU|Iu4M)M5urS$n1WgKo7)P
zkPe`WGbT*V=FrqRoxvVEC1a*$<CNMd8X2q^5dJ(gzCaI0Zhp#S19lOS%Rpl@#6XHA
zfEuM@fsB=t^SBhjj=KPIoW<Q9?xNJR)QW<f%;e0HDV-TR!P+zPQc^3XWbDp}%h=Na
zaum$@B0$HTML1u8<s?C;-{rKCMmYLE*b@jx|DSBdB`eOt$iRTZu^hmV%whz}1Kn%E
zl*KpsBA2l0&K|bn)Wo9X3~X)`1-kJs!i_u}Ac3Dy0dVwzgLrZttN7%6ZbjZMq^POf
zJeRwQi7|Gw1YaYQL`RQsF)+!M6qW)LT5)_%esW??YVj1m&9ej~7|qKvinGjt4$CqD
pxxR-pFEKZ@q_P0002Jh9eqc$z(hLa@w>U!!tS+N+^GiWxMgaN+`91&u

delta 719
zcmdn3)}zMKz%rF_Bg-l#0So<%{M=OivfRX?%*4D*{mG}8rcX9x)|}kK%s+V{yUgT+
z%rRivikoM$Kg%n=9<HLq^5n#VlFa<PDSn$RSq&Lk>oY_%YC)<vOEXk5bb-98$@ADU
z7^h5TXIHS9lEEH3C4-@dEi*4CGcR?@<SCksQ);JZWUyvHqy&06(o^#?^HNePrnF9h
z$*}>ASui=7-I8@4kTn}<yd~r6$+y`ZcxPs)W~gPTdkX`_r@<W;z`?>e3B;2CIbs4(
zt~Y}*gBhaMuQVxR;^a;a&5$!-*UW-D0m7e;#s@knH$MfNldhB|C1!|$oG$_Nl~gQ{
zv1)QPyCT??7eTHxz1PECl$w@WQIM0FoLMrZGh-K$X&HMm;xhJjfZPc4hX~NE=V1O|
z1@TVd_s4He8+*79vKSZ{7{H!_djcUO(8E@onpl*aff}$`tdk44L>a*j=Kuz878B46
zpq&=xS^Pj2ru$*0U~#=D(7pelt`}hZ1!94d0XPOG7jRqfb|b}C)#k0-RZNU=n+^CH
znHW1apA?W_G%wF6$+7_2n`H_lN_#l-5_3~aDhpDJ!O5iD4=m|dnjrxS_L2-Ou)2(@
J%@RV&i~z3<_dWms

diff --git a/doc/build/doctrees/modules.doctree b/doc/build/doctrees/modules.doctree
index b23b0f6f2f27d7ed87b7762d7b0684225843b8f9..80d31ec402191e61cafbd19f4dcc0483376048ab 100644
GIT binary patch
delta 382
zcmZn@St`QXz%o^eYa;6ou?)rx<{q}<{L-T2)G2;FEIFBZKzicd1o;f<9yk4r{M=Oi
zvfRX?%*4D*{qX#vZ2h3r-29SMg~{fOI!qZdld~B8#AIuyXk^I8PRURNVr3v!1!DEd
z=NPBSmu6^Y7-mRkXl2NFvt&qR=$0lWW+2p0p2#Ft57!Yp1*BXXsEixrE{Hb2(xg<l
zjvnshwA7q}%F>d|oZ=~oFbmOz!S+K;;{=+<j4;ic3Dp5Whe{&Z4-bkAEud32+cUps
zWUSe&&uYZTsI@tX&6`o8qer+H7#<~srNB@qj?c+YPRvOyp5nK89lJQAOjt&6aSvx+
cVs2_lWdTsQc1lK=UvY*!kPhDbkVBOb05Xb%Hvj+t

delta 366
zcmZ1~(k8;%z%unW=S0>W6E7!7^{^G^mlh?bPU*4I&&bbB)i29UEXqvG%haD7#HhpG
z!;+JkmpWx~1EZgqbnO(44B6Nz8S+4^2*k=jtUCD#<Fxu7uA;>9<ivuK%>2A5ex(`e
z8HO1e8JZbd-YgkX8M>uOi5bYcd-zN8lS_(HQ+3OW5(^4ai>4$Z42+!u(ytBF$DP5L
z!3;6SuQVwYZbT1va$0ImL1k%4W==6st9%T^LFnRO_d$%~1RBSTFwUC^-ATyy!^0#)
z6X=x9?#%BQ8EZG2vl=lnYHrSA^JZl1+<cZ@oKYq`Bc!;8GcPeWwWP8jwRlSHl#Fn{
O;tW|J9kPj2l@S1_(Shy&

diff --git a/doc/build/html/.buildinfo b/doc/build/html/.buildinfo
index 1e094d7..7be85be 100644
--- a/doc/build/html/.buildinfo
+++ b/doc/build/html/.buildinfo
@@ -1,4 +1,4 @@
 # Sphinx build info version 1
 # This file hashes the configuration used when building these files. When it is not found, a full rebuild will be done.
-config: 2dd7d55b090045f2190c3a6867000ee1
+config: 588c1a44f724000c460bdf543d2999af
 tags: 645f666f9bcd5a90fca523b33c5a78b7
diff --git a/doc/build/html/_static/basic.css b/doc/build/html/_static/basic.css
index 7ed0e58..6df76b0 100644
--- a/doc/build/html/_static/basic.css
+++ b/doc/build/html/_static/basic.css
@@ -4,7 +4,7 @@
  *
  * Sphinx stylesheet -- basic theme.
  *
- * :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  *
  */
@@ -398,6 +398,13 @@ table.field-list td, table.field-list th {
     margin: 0;
 }
 
+.field-name {
+    -moz-hyphens: manual;
+    -ms-hyphens: manual;
+    -webkit-hyphens: manual;
+    hyphens: manual;
+}
+
 /* -- other body styles ----------------------------------------------------- */
 
 ol.arabic {
diff --git a/doc/build/html/_static/css3-mediaqueries.js b/doc/build/html/_static/css3-mediaqueries.js
index 3b90652..59735f5 100644
--- a/doc/build/html/_static/css3-mediaqueries.js
+++ b/doc/build/html/_static/css3-mediaqueries.js
@@ -1 +1 @@
-if(typeof Object.create!=="function"){Object.create=function(e){function t(){}t.prototype=e;return new t}}var ua={toString:function(){return navigator.userAgent},test:function(e){return this.toString().toLowerCase().indexOf(e.toLowerCase())>-1}};ua.version=(ua.toString().toLowerCase().match(/[\s\S]+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1];ua.webkit=ua.test("webkit");ua.gecko=ua.test("gecko")&&!ua.webkit;ua.opera=ua.test("opera");ua.ie=ua.test("msie")&&!ua.opera;ua.ie6=ua.ie&&document.compatMode&&typeof document.documentElement.style.maxHeight==="undefined";ua.ie7=ua.ie&&document.documentElement&&typeof document.documentElement.style.maxHeight!=="undefined"&&typeof XDomainRequest==="undefined";ua.ie8=ua.ie&&typeof XDomainRequest!=="undefined";var domReady=function(){var e=[];var t=function(){if(!arguments.callee.done){arguments.callee.done=true;for(var t=0;t<e.length;t++){e[t]()}}};if(document.addEventListener){document.addEventListener("DOMContentLoaded",t,false)}if(ua.ie){(function(){try{document.documentElement.doScroll("left")}catch(e){setTimeout(arguments.callee,50);return}t()})();document.onreadystatechange=function(){if(document.readyState==="complete"){document.onreadystatechange=null;t()}}}if(ua.webkit&&document.readyState){(function(){if(document.readyState!=="loading"){t()}else{setTimeout(arguments.callee,10)}})()}window.onload=t;return function(t){if(typeof t==="function"){e[e.length]=t}return t}}();var cssHelper=function(){var e={BLOCKS:/[^\s{;][^{;]*\{(?:[^{}]*\{[^{}]*\}[^{}]*|[^{}]*)*\}/g,BLOCKS_INSIDE:/[^\s{][^{]*\{[^{}]*\}/g,DECLARATIONS:/[a-zA-Z\-]+[^;]*:[^;]+;/g,RELATIVE_URLS:/url\(['"]?([^\/\)'"][^:\)'"]+)['"]?\)/g,REDUNDANT_COMPONENTS:/(?:\/\*([^*\\\\]|\*(?!\/))+\*\/|@import[^;]+;)/g,REDUNDANT_WHITESPACE:/\s*(,|:|;|\{|\})\s*/g,WHITESPACE_IN_PARENTHESES:/\(\s*(\S*)\s*\)/g,MORE_WHITESPACE:/\s{2,}/g,FINAL_SEMICOLONS:/;\}/g,NOT_WHITESPACE:/\S+/g};var t,n=false;var r=[];var s=function(e){if(typeof e==="function"){r[r.length]=e}};var o=function(){for(var e=0;e<r.length;e++){r[e](t)}};var u={};var a=function(e,t){if(u[e]){var n=u[e].listeners;if(n){for(var r=0;r<n.length;r++){n[r](t)}}}};var f=function(e,t,n){if(ua.ie&&!window.XMLHttpRequest){window.XMLHttpRequest=function(){return new ActiveXObject("Microsoft.XMLHTTP")}}if(!XMLHttpRequest){return""}var r=new XMLHttpRequest;try{r.open("get",e,true);r.setRequestHeader("X_REQUESTED_WITH","XMLHttpRequest")}catch(i){n();return}var s=false;setTimeout(function(){s=true},5e3);document.documentElement.style.cursor="progress";r.onreadystatechange=function(){if(r.readyState===4&&!s){if(!r.status&&location.protocol==="file:"||r.status>=200&&r.status<300||r.status===304||navigator.userAgent.indexOf("Safari")>-1&&typeof r.status==="undefined"){t(r.responseText)}else{n()}document.documentElement.style.cursor="";r=null}};r.send("")};var l=function(t){t=t.replace(e.REDUNDANT_COMPONENTS,"");t=t.replace(e.REDUNDANT_WHITESPACE,"$1");t=t.replace(e.WHITESPACE_IN_PARENTHESES,"($1)");t=t.replace(e.MORE_WHITESPACE," ");t=t.replace(e.FINAL_SEMICOLONS,"}");return t};var c={stylesheet:function(t){var n={};var r=[],i=[],s=[],o=[];var u=t.cssHelperText;var a=t.getAttribute("media");if(a){var f=a.toLowerCase().split(",")}else{var f=["all"]}for(var l=0;l<f.length;l++){r[r.length]=c.mediaQuery(f[l],n)}var h=u.match(e.BLOCKS);if(h!==null){for(var l=0;l<h.length;l++){if(h[l].substring(0,7)==="@media "){var p=c.mediaQueryList(h[l],n);s=s.concat(p.getRules());i[i.length]=p}else{s[s.length]=o[o.length]=c.rule(h[l],n,null)}}}n.element=t;n.getCssText=function(){return u};n.getAttrMediaQueries=function(){return r};n.getMediaQueryLists=function(){return i};n.getRules=function(){return s};n.getRulesWithoutMQ=function(){return o};return n},mediaQueryList:function(t,n){var r={};var i=t.indexOf("{");var s=t.substring(0,i);t=t.substring(i+1,t.length-1);var o=[],u=[];var a=s.toLowerCase().substring(7).split(",");for(var f=0;f<a.length;f++){o[o.length]=c.mediaQuery(a[f],r)}var l=t.match(e.BLOCKS_INSIDE);if(l!==null){for(f=0;f<l.length;f++){u[u.length]=c.rule(l[f],n,r)}}r.type="mediaQueryList";r.getMediaQueries=function(){return o};r.getRules=function(){return u};r.getListText=function(){return s};r.getCssText=function(){return t};return r},mediaQuery:function(t,n){t=t||"";var r,i;if(n.type==="mediaQueryList"){r=n}else{i=n}var s=false,o;var u=[];var a=true;var f=t.match(e.NOT_WHITESPACE);for(var l=0;l<f.length;l++){var c=f[l];if(!o&&(c==="not"||c==="only")){if(c==="not"){s=true}}else if(!o){o=c}else if(c.charAt(0)==="("){var h=c.substring(1,c.length-1).split(":");u[u.length]={mediaFeature:h[0],value:h[1]||null}}}return{getQueryText:function(){return t},getAttrStyleSheet:function(){return i||null},getList:function(){return r||null},getValid:function(){return a},getNot:function(){return s},getMediaType:function(){return o},getExpressions:function(){return u}}},rule:function(e,t,n){var r={};var i=e.indexOf("{");var s=e.substring(0,i);var o=s.split(",");var u=[];var a=e.substring(i+1,e.length-1).split(";");for(var f=0;f<a.length;f++){u[u.length]=c.declaration(a[f],r)}r.getStylesheet=function(){return t||null};r.getMediaQueryList=function(){return n||null};r.getSelectors=function(){return o};r.getSelectorText=function(){return s};r.getDeclarations=function(){return u};r.getPropertyValue=function(e){for(var t=0;t<u.length;t++){if(u[t].getProperty()===e){return u[t].getValue()}}return null};return r},declaration:function(e,t){var n=e.indexOf(":");var r=e.substring(0,n);var i=e.substring(n+1);return{getRule:function(){return t||null},getProperty:function(){return r},getValue:function(){return i}}}};var h=function(e){if(typeof e.cssHelperText!=="string"){return}var n={stylesheet:null,mediaQueryLists:[],rules:[],selectors:{},declarations:[],properties:{}};var r=n.stylesheet=c.stylesheet(e);var s=n.mediaQueryLists=r.getMediaQueryLists();var o=n.rules=r.getRules();var u=n.selectors;var a=function(e){var t=e.getSelectors();for(var n=0;n<t.length;n++){var r=t[n];if(!u[r]){u[r]=[]}u[r][u[r].length]=e}};for(i=0;i<o.length;i++){a(o[i])}var f=n.declarations;for(i=0;i<o.length;i++){f=n.declarations=f.concat(o[i].getDeclarations())}var l=n.properties;for(i=0;i<f.length;i++){var h=f[i].getProperty();if(!l[h]){l[h]=[]}l[h][l[h].length]=f[i]}e.cssHelperParsed=n;t[t.length]=e;return n};var p=function(e,t){return;e.cssHelperText=l(t||e.innerHTML);return h(e)};var d=function(){n=true;t=[];var r=[];var i=function(){for(var e=0;e<r.length;e++){h(r[e])}var t=document.getElementsByTagName("style");for(e=0;e<t.length;e++){p(t[e])}n=false;o()};var s=document.getElementsByTagName("link");for(var u=0;u<s.length;u++){var a=s[u];if(a.getAttribute("rel").indexOf("style")>-1&&a.href&&a.href.length!==0&&!a.disabled){r[r.length]=a}}if(r.length>0){var c=0;var d=function(){c++;if(c===r.length){i()}};var v=function(t){var n=t.href;f(n,function(r){r=l(r).replace(e.RELATIVE_URLS,"url("+n.substring(0,n.lastIndexOf("/"))+"/$1)");t.cssHelperText=r;d()},d)};for(u=0;u<r.length;u++){v(r[u])}}else{i()}};var v={stylesheets:"array",mediaQueryLists:"array",rules:"array",selectors:"object",declarations:"array",properties:"object"};var m={stylesheets:null,mediaQueryLists:null,rules:null,selectors:null,declarations:null,properties:null};var g=function(e,t){if(m[e]!==null){if(v[e]==="array"){return m[e]=m[e].concat(t)}else{var n=m[e];for(var r in t){if(t.hasOwnProperty(r)){if(!n[r]){n[r]=t[r]}else{n[r]=n[r].concat(t[r])}}}return n}}};var y=function(e){m[e]=v[e]==="array"?[]:{};for(var n=0;n<t.length;n++){var r=e==="stylesheets"?"stylesheet":e;g(e,t[n].cssHelperParsed[r])}return m[e]};var b=function(e){if(typeof window.innerWidth!="undefined"){return window["inner"+e]}else if(typeof document.documentElement!=="undefined"&&typeof document.documentElement.clientWidth!=="undefined"&&document.documentElement.clientWidth!=0){return document.documentElement["client"+e]}};return{addStyle:function(e,t,n){var r=document.createElement("style");r.setAttribute("type","text/css");if(t&&t.length>0){r.setAttribute("media",t.join(","))}document.getElementsByTagName("head")[0].appendChild(r);if(r.styleSheet){r.styleSheet.cssText=e}else{r.appendChild(document.createTextNode(e))}r.addedWithCssHelper=true;if(typeof n==="undefined"||n===true){cssHelper.parsed(function(t){var n=p(r,e);for(var i in n){if(n.hasOwnProperty(i)){g(i,n[i])}}a("newStyleParsed",r)})}else{r.parsingDisallowed=true}return r},removeStyle:function(e){return e.parentNode.removeChild(e)},parsed:function(e){if(n){s(e)}else{if(typeof t!=="undefined"){if(typeof e==="function"){e(t)}}else{s(e);d()}}},stylesheets:function(e){cssHelper.parsed(function(t){e(m.stylesheets||y("stylesheets"))})},mediaQueryLists:function(e){cssHelper.parsed(function(t){e(m.mediaQueryLists||y("mediaQueryLists"))})},rules:function(e){cssHelper.parsed(function(t){e(m.rules||y("rules"))})},selectors:function(e){cssHelper.parsed(function(t){e(m.selectors||y("selectors"))})},declarations:function(e){cssHelper.parsed(function(t){e(m.declarations||y("declarations"))})},properties:function(e){cssHelper.parsed(function(t){e(m.properties||y("properties"))})},broadcast:a,addListener:function(e,t){if(typeof t==="function"){if(!u[e]){u[e]={listeners:[]}}u[e].listeners[u[e].listeners.length]=t}},removeListener:function(e,t){if(typeof t==="function"&&u[e]){var n=u[e].listeners;for(var r=0;r<n.length;r++){if(n[r]===t){n.splice(r,1);r-=1}}}},getViewportWidth:function(){return b("Width")},getViewportHeight:function(){return b("Height")}}}();domReady(function(){var t;var n={LENGTH_UNIT:/[0-9]+(em|ex|px|in|cm|mm|pt|pc)$/,RESOLUTION_UNIT:/[0-9]+(dpi|dpcm)$/,ASPECT_RATIO:/^[0-9]+\/[0-9]+$/,ABSOLUTE_VALUE:/^[0-9]*(\.[0-9]+)*$/};var r=[];var i=function(){var e="css3-mediaqueries-test";var t=document.createElement("div");t.id=e;var n=cssHelper.addStyle("@media all and (width) { #"+e+" { width: 1px !important; } }",[],false);document.body.appendChild(t);var r=t.offsetWidth===1;n.parentNode.removeChild(n);t.parentNode.removeChild(t);i=function(){return r};return r};var s=function(){t=document.createElement("div");t.style.cssText="position:absolute;top:-9999em;left:-9999em;"+"margin:0;border:none;padding:0;width:1em;font-size:1em;";document.body.appendChild(t);if(t.offsetWidth!==16){t.style.fontSize=16/t.offsetWidth+"em"}t.style.width=""};var o=function(e){t.style.width=e;var n=t.offsetWidth;t.style.width="";return n};var u=function(e,t){var r=e.length;var i=e.substring(0,4)==="min-";var s=!i&&e.substring(0,4)==="max-";if(t!==null){var u;var a;if(n.LENGTH_UNIT.exec(t)){u="length";a=o(t)}else if(n.RESOLUTION_UNIT.exec(t)){u="resolution";a=parseInt(t,10);var f=t.substring((a+"").length)}else if(n.ASPECT_RATIO.exec(t)){u="aspect-ratio";a=t.split("/")}else if(n.ABSOLUTE_VALUE){u="absolute";a=t}else{u="unknown"}}var l,c;if("device-width"===e.substring(r-12,r)){l=screen.width;if(t!==null){if(u==="length"){return i&&l>=a||s&&l<a||!i&&!s&&l===a}else{return false}}else{return l>0}}else if("device-height"===e.substring(r-13,r)){c=screen.height;if(t!==null){if(u==="length"){return i&&c>=a||s&&c<a||!i&&!s&&c===a}else{return false}}else{return c>0}}else if("width"===e.substring(r-5,r)){l=document.documentElement.clientWidth||document.body.clientWidth;if(t!==null){if(u==="length"){return i&&l>=a||s&&l<a||!i&&!s&&l===a}else{return false}}else{return l>0}}else if("height"===e.substring(r-6,r)){c=document.documentElement.clientHeight||document.body.clientHeight;if(t!==null){if(u==="length"){return i&&c>=a||s&&c<a||!i&&!s&&c===a}else{return false}}else{return c>0}}else if("device-aspect-ratio"===e.substring(r-19,r)){return u==="aspect-ratio"&&screen.width*a[1]===screen.height*a[0]}else if("color-index"===e.substring(r-11,r)){var h=Math.pow(2,screen.colorDepth);if(t!==null){if(u==="absolute"){return i&&h>=a||s&&h<a||!i&&!s&&h===a}else{return false}}else{return h>0}}else if("color"===e.substring(r-5,r)){var p=screen.colorDepth;if(t!==null){if(u==="absolute"){return i&&p>=a||s&&p<a||!i&&!s&&p===a}else{return false}}else{return p>0}}else if("resolution"===e.substring(r-10,r)){var d;if(f==="dpcm"){d=o("1cm")}else{d=o("1in")}if(t!==null){if(u==="resolution"){return i&&d>=a||s&&d<a||!i&&!s&&d===a}else{return false}}else{return d>0}}else{return false}};var a=function(e){var t=e.getValid();var n=e.getExpressions();var r=n.length;if(r>0){for(var i=0;i<r&&t;i++){t=u(n[i].mediaFeature,n[i].value)}var s=e.getNot();return t&&!s||s&&!t}return t};var f=function(e,t){var n=e.getMediaQueries();var i={};for(var s=0;s<n.length;s++){var o=n[s].getMediaType();if(n[s].getExpressions().length===0){continue}var u=true;if(o!=="all"&&t&&t.length>0){u=false;for(var f=0;f<t.length;f++){if(t[f]===o){u=true}}}if(u&&a(n[s])){i[o]=true}}var l=[],c=0;for(var h in i){if(i.hasOwnProperty(h)){if(c>0){l[c++]=","}l[c++]=h}}if(l.length>0){r[r.length]=cssHelper.addStyle("@media "+l.join("")+"{"+e.getCssText()+"}",t,false)}};var l=function(e,t){for(var n=0;n<e.length;n++){f(e[n],t)}};var c=function(e){var t=e.getAttrMediaQueries();var n=false;var i={};for(var s=0;s<t.length;s++){if(a(t[s])){i[t[s].getMediaType()]=t[s].getExpressions().length>0}}var o=[],u=[];for(var f in i){if(i.hasOwnProperty(f)){o[o.length]=f;if(i[f]){u[u.length]=f}if(f==="all"){n=true}}}if(u.length>0){r[r.length]=cssHelper.addStyle(e.getCssText(),u,false)}var c=e.getMediaQueryLists();if(n){l(c)}else{l(c,o)}};var h=function(e){for(var t=0;t<e.length;t++){c(e[t])}if(ua.ie){document.documentElement.style.display="block";setTimeout(function(){document.documentElement.style.display=""},0);setTimeout(function(){cssHelper.broadcast("cssMediaQueriesTested")},100)}else{cssHelper.broadcast("cssMediaQueriesTested")}};var p=function(){for(var e=0;e<r.length;e++){cssHelper.removeStyle(r[e])}r=[];cssHelper.stylesheets(h)};var d=0;var v=function(){var e=cssHelper.getViewportWidth();var t=cssHelper.getViewportHeight();if(ua.ie){var n=document.createElement("div");n.style.position="absolute";n.style.top="-9999em";n.style.overflow="scroll";document.body.appendChild(n);d=n.offsetWidth-n.clientWidth;document.body.removeChild(n)}var r;var s=function(){var n=cssHelper.getViewportWidth();var s=cssHelper.getViewportHeight();if(Math.abs(n-e)>d||Math.abs(s-t)>d){e=n;t=s;clearTimeout(r);r=setTimeout(function(){if(!i()){p()}else{cssHelper.broadcast("cssMediaQueriesTested")}},500)}};window.onresize=function(){var e=window.onresize||function(){};return function(){e();s()}}()};var m=document.documentElement;m.style.marginLeft="-32767px";setTimeout(function(){m.style.marginLeft=""},5e3);return function(){if(!i()){cssHelper.addListener("newStyleParsed",function(e){c(e.cssHelperParsed.stylesheet)});cssHelper.addListener("cssMediaQueriesTested",function(){if(ua.ie){m.style.width="1px"}setTimeout(function(){m.style.width="";m.style.marginLeft=""},0);cssHelper.removeListener("cssMediaQueriesTested",arguments.callee)});s();p()}else{m.style.marginLeft=""}v()}}());try{document.execCommand("BackgroundImageCache",false,true)}catch(e){}
\ No newline at end of file
+if(typeof Object.create!=="function"){Object.create=function(e){function t(){}t.prototype=e;return new t}}var ua={toString:function(){return navigator.userAgent},test:function(e){return this.toString().toLowerCase().indexOf(e.toLowerCase())>-1}};ua.version=(ua.toString().toLowerCase().match(/[\s\S]+(?:rv|it|ra|ie)[\/: ]([\d.]+)/)||[])[1];ua.webkit=ua.test("webkit");ua.gecko=ua.test("gecko")&&!ua.webkit;ua.opera=ua.test("opera");ua.ie=ua.test("msie")&&!ua.opera;ua.ie6=ua.ie&&document.compatMode&&typeof document.documentElement.style.maxHeight==="undefined";ua.ie7=ua.ie&&document.documentElement&&typeof document.documentElement.style.maxHeight!=="undefined"&&typeof XDomainRequest==="undefined";ua.ie8=ua.ie&&typeof XDomainRequest!=="undefined";var domReady=function(){var e=[];var t=function(){if(!arguments.callee.done){arguments.callee.done=true;for(var t=0;t<e.length;t++){e[t]()}}};if(document.addEventListener){document.addEventListener("DOMContentLoaded",t,false)}if(ua.ie){(function(){try{document.documentElement.doScroll("left")}catch(e){setTimeout(arguments.callee,50);return}t()})();document.onreadystatechange=function(){if(document.readyState==="complete"){document.onreadystatechange=null;t()}}}if(ua.webkit&&document.readyState){(function(){if(document.readyState!=="loading"){t()}else{setTimeout(arguments.callee,10)}})()}window.onload=t;return function(t){if(typeof t==="function"){e[e.length]=t}return t}}();var cssHelper=function(){var e={BLOCKS:/[^\s{;][^{;]*\{(?:[^{}]*\{[^{}]*\}[^{}]*|[^{}]*)*\}/g,BLOCKS_INSIDE:/[^\s{][^{]*\{[^{}]*\}/g,DECLARATIONS:/[a-zA-Z\-]+[^;]*:[^;]+;/g,RELATIVE_URLS:/url\(['"]?([^\/\)'"][^:\)'"]+)['"]?\)/g,REDUNDANT_COMPONENTS:/(?:\/\*([^*\\\\]|\*(?!\/))+\*\/|@import[^;]+;)/g,REDUNDANT_WHITESPACE:/\s*(,|:|;|\{|\})\s*/g,WHITESPACE_IN_PARENTHESES:/\(\s*(\S*)\s*\)/g,MORE_WHITESPACE:/\s{2,}/g,FINAL_SEMICOLONS:/;\}/g,NOT_WHITESPACE:/\S+/g};var t,n=false;var r=[];var s=function(e){if(typeof e==="function"){r[r.length]=e}};var o=function(){for(var e=0;e<r.length;e++){r[e](t)}};var u={};var a=function(e,t){if(u[e]){var n=u[e].listeners;if(n){for(var r=0;r<n.length;r++){n[r](t)}}}};var f=function(e,t,n){if(ua.ie&&!window.XMLHttpRequest){window.XMLHttpRequest=function(){return new ActiveXObject("Microsoft.XMLHTTP")}}if(!XMLHttpRequest){return""}var r=new XMLHttpRequest;try{r.open("get",e,true);r.setRequestHeader("X_REQUESTED_WITH","XMLHttpRequest")}catch(i){n();return}var s=false;setTimeout(function(){s=true},5e3);document.documentElement.style.cursor="progress";r.onreadystatechange=function(){if(r.readyState===4&&!s){if(!r.status&&location.protocol==="file:"||r.status>=200&&r.status<300||r.status===304||navigator.userAgent.indexOf("Safari")>-1&&typeof r.status==="undefined"){t(r.responseText)}else{n()}document.documentElement.style.cursor="";r=null}};r.send("")};var l=function(t){t=t.replace(e.REDUNDANT_COMPONENTS,"");t=t.replace(e.REDUNDANT_WHITESPACE,"$1");t=t.replace(e.WHITESPACE_IN_PARENTHESES,"($1)");t=t.replace(e.MORE_WHITESPACE," ");t=t.replace(e.FINAL_SEMICOLONS,"}");return t};var c={stylesheet:function(t){var n={};var r=[],i=[],s=[],o=[];var u=t.cssHelperText;var a=t.getAttribute("media");if(a){var f=a.toLowerCase().split(",")}else{var f=["all"]}for(var l=0;l<f.length;l++){r[r.length]=c.mediaQuery(f[l],n)}var h=u.match(e.BLOCKS);if(h!==null){for(var l=0;l<h.length;l++){if(h[l].substring(0,7)==="@media "){var p=c.mediaQueryList(h[l],n);s=s.concat(p.getRules());i[i.length]=p}else{s[s.length]=o[o.length]=c.rule(h[l],n,null)}}}n.element=t;n.getCssText=function(){return u};n.getAttrMediaQueries=function(){return r};n.getMediaQueryLists=function(){return i};n.getRules=function(){return s};n.getRulesWithoutMQ=function(){return o};return n},mediaQueryList:function(t,n){var r={};var i=t.indexOf("{");var s=t.substring(0,i);t=t.substring(i+1,t.length-1);var o=[],u=[];var a=s.toLowerCase().substring(7).split(",");for(var f=0;f<a.length;f++){o[o.length]=c.mediaQuery(a[f],r)}var l=t.match(e.BLOCKS_INSIDE);if(l!==null){for(f=0;f<l.length;f++){u[u.length]=c.rule(l[f],n,r)}}r.type="mediaQueryList";r.getMediaQueries=function(){return o};r.getRules=function(){return u};r.getListText=function(){return s};r.getCssText=function(){return t};return r},mediaQuery:function(t,n){t=t||"";var r,i;if(n.type==="mediaQueryList"){r=n}else{i=n}var s=false,o;var u=[];var a=true;var f=t.match(e.NOT_WHITESPACE);for(var l=0;l<f.length;l++){var c=f[l];if(!o&&(c==="not"||c==="only")){if(c==="not"){s=true}}else if(!o){o=c}else if(c.charAt(0)==="("){var h=c.substring(1,c.length-1).split(":");u[u.length]={mediaFeature:h[0],value:h[1]||null}}}return{getQueryText:function(){return t},getAttrStyleSheet:function(){return i||null},getList:function(){return r||null},getValid:function(){return a},getNot:function(){return s},getMediaType:function(){return o},getExpressions:function(){return u}}},rule:function(e,t,n){var r={};var i=e.indexOf("{");var s=e.substring(0,i);var o=s.split(",");var u=[];var a=e.substring(i+1,e.length-1).split(";");for(var f=0;f<a.length;f++){u[u.length]=c.declaration(a[f],r)}r.getStylesheet=function(){return t||null};r.getMediaQueryList=function(){return n||null};r.getSelectors=function(){return o};r.getSelectorText=function(){return s};r.getDeclarations=function(){return u};r.getPropertyValue=function(e){for(var t=0;t<u.length;t++){if(u[t].getProperty()===e){return u[t].getValue()}}return null};return r},declaration:function(e,t){var n=e.indexOf(":");var r=e.substring(0,n);var i=e.substring(n+1);return{getRule:function(){return t||null},getProperty:function(){return r},getValue:function(){return i}}}};var h=function(e){if(typeof e.cssHelperText!=="string"){return}var n={stylesheet:null,mediaQueryLists:[],rules:[],selectors:{},declarations:[],properties:{}};var r=n.stylesheet=c.stylesheet(e);var s=n.mediaQueryLists=r.getMediaQueryLists();var o=n.rules=r.getRules();var u=n.selectors;var a=function(e){var t=e.getSelectors();for(var n=0;n<t.length;n++){var r=t[n];if(!u[r]){u[r]=[]}u[r][u[r].length]=e}};for(i=0;i<o.length;i++){a(o[i])}var f=n.declarations;for(i=0;i<o.length;i++){f=n.declarations=f.concat(o[i].getDeclarations())}var l=n.properties;for(i=0;i<f.length;i++){var h=f[i].getProperty();if(!l[h]){l[h]=[]}l[h][l[h].length]=f[i]}e.cssHelperParsed=n;t[t.length]=e;return n};var p=function(e,t){return;e.cssHelperText=l(t||e.innerHTML);return h(e)};var d=function(){n=true;t=[];var r=[];var i=function(){for(var e=0;e<r.length;e++){h(r[e])}var t=document.getElementsByTagName("style");for(e=0;e<t.length;e++){p(t[e])}n=false;o()};var s=document.getElementsByTagName("link");for(var u=0;u<s.length;u++){var a=s[u];if(a.getAttribute("rel").indexOf("style")>-1&&a.href&&a.href.length!==0&&!a.disabled){r[r.length]=a}}if(r.length>0){var c=0;var d=function(){c++;if(c===r.length){i()}};var v=function(t){var n=t.href;f(n,function(r){r=l(r).replace(e.RELATIVE_URLS,"url("+n.substring(0,n.lastIndexOf("/"))+"/$1)");t.cssHelperText=r;d()},d)};for(u=0;u<r.length;u++){v(r[u])}}else{i()}};var v={stylesheets:"array",mediaQueryLists:"array",rules:"array",selectors:"object",declarations:"array",properties:"object"};var m={stylesheets:null,mediaQueryLists:null,rules:null,selectors:null,declarations:null,properties:null};var g=function(e,t){if(m[e]!==null){if(v[e]==="array"){return m[e]=m[e].concat(t)}else{var n=m[e];for(var r in t){if(t.hasOwnProperty(r)){if(!n[r]){n[r]=t[r]}else{n[r]=n[r].concat(t[r])}}}return n}}};var y=function(e){m[e]=v[e]==="array"?[]:{};for(var n=0;n<t.length;n++){var r=e==="stylesheets"?"stylesheet":e;g(e,t[n].cssHelperParsed[r])}return m[e]};var b=function(e){if(typeof window.innerWidth!="undefined"){return window["inner"+e]}else if(typeof document.documentElement!=="undefined"&&typeof document.documentElement.clientWidth!=="undefined"&&document.documentElement.clientWidth!=0){return document.documentElement["client"+e]}};return{addStyle:function(e,t,n){var r=document.createElement("style");r.setAttribute("type","text/css");if(t&&t.length>0){r.setAttribute("media",t.join(","))}document.getElementsByTagName("head")[0].appendChild(r);if(r.styleSheet){r.styleSheet.cssText=e}else{r.appendChild(document.createTextNode(e))}r.addedWithCssHelper=true;if(typeof n==="undefined"||n===true){cssHelper.parsed(function(t){var n=p(r,e);for(var i in n){if(n.hasOwnProperty(i)){g(i,n[i])}}a("newStyleParsed",r)})}else{r.parsingDisallowed=true}return r},removeStyle:function(e){return e.parentNode.removeChild(e)},parsed:function(e){if(n){s(e)}else{if(typeof t!=="undefined"){if(typeof e==="function"){e(t)}}else{s(e);d()}}},stylesheets:function(e){cssHelper.parsed(function(t){e(m.stylesheets||y("stylesheets"))})},mediaQueryLists:function(e){cssHelper.parsed(function(t){e(m.mediaQueryLists||y("mediaQueryLists"))})},rules:function(e){cssHelper.parsed(function(t){e(m.rules||y("rules"))})},selectors:function(e){cssHelper.parsed(function(t){e(m.selectors||y("selectors"))})},declarations:function(e){cssHelper.parsed(function(t){e(m.declarations||y("declarations"))})},properties:function(e){cssHelper.parsed(function(t){e(m.properties||y("properties"))})},broadcast:a,addListener:function(e,t){if(typeof t==="function"){if(!u[e]){u[e]={listeners:[]}}u[e].listeners[u[e].listeners.length]=t}},removeListener:function(e,t){if(typeof t==="function"&&u[e]){var n=u[e].listeners;for(var r=0;r<n.length;r++){if(n[r]===t){n.splice(r,1);r-=1}}}},getViewportWidth:function(){return b("Width")},getViewportHeight:function(){return b("Height")}}}();domReady(function(){var t;var n={LENGTH_UNIT:/[0-9]+(em|ex|px|in|cm|mm|pt|pc)$/,RESOLUTION_UNIT:/[0-9]+(dpi|dpcm)$/,ASPECT_RATIO:/^[0-9]+\/[0-9]+$/,ABSOLUTE_VALUE:/^[0-9]*(\.[0-9]+)*$/};var r=[];var i=function(){var e="css3-mediaqueries-test";var t=document.createElement("div");t.id=e;var n=cssHelper.addStyle("@media all and (width) { #"+e+" { width: 1px !important; } }",[],false);document.body.appendChild(t);var r=t.offsetWidth===1;n.parentNode.removeChild(n);t.parentNode.removeChild(t);i=function(){return r};return r};var s=function(){t=document.createElement("div");t.style.cssText="position:absolute;top:-9999em;left:-9999em;"+"margin:0;border:none;padding:0;width:1em;font-size:1em;";document.body.appendChild(t);if(t.offsetWidth!==16){t.style.fontSize=16/t.offsetWidth+"em"}t.style.width=""};var o=function(e){t.style.width=e;var n=t.offsetWidth;t.style.width="";return n};var u=function(e,t){var r=e.length;var i=e.substring(0,4)==="min-";var s=!i&&e.substring(0,4)==="max-";if(t!==null){var u;var a;if(n.LENGTH_UNIT.exec(t)){u="length";a=o(t)}else if(n.RESOLUTION_UNIT.exec(t)){u="resolution";a=parseInt(t,10);var f=t.substring((a+"").length)}else if(n.ASPECT_RATIO.exec(t)){u="aspect-ratio";a=t.split("/")}else if(n.ABSOLUTE_VALUE){u="absolute";a=t}else{u="unknown"}}var l,c;if("device-width"===e.substring(r-12,r)){l=screen.width;if(t!==null){if(u==="length"){return i&&l>=a||s&&l<a||!i&&!s&&l===a}else{return false}}else{return l>0}}else if("device-height"===e.substring(r-13,r)){c=screen.height;if(t!==null){if(u==="length"){return i&&c>=a||s&&c<a||!i&&!s&&c===a}else{return false}}else{return c>0}}else if("width"===e.substring(r-5,r)){l=document.documentElement.clientWidth||document.body.clientWidth;if(t!==null){if(u==="length"){return i&&l>=a||s&&l<a||!i&&!s&&l===a}else{return false}}else{return l>0}}else if("height"===e.substring(r-6,r)){c=document.documentElement.clientHeight||document.body.clientHeight;if(t!==null){if(u==="length"){return i&&c>=a||s&&c<a||!i&&!s&&c===a}else{return false}}else{return c>0}}else if("device-aspect-ratio"===e.substring(r-19,r)){return u==="aspect-ratio"&&screen.width*a[1]===screen.height*a[0]}else if("color-index"===e.substring(r-11,r)){var h=Math.pow(2,screen.colorDepth);if(t!==null){if(u==="absolute"){return i&&h>=a||s&&h<a||!i&&!s&&h===a}else{return false}}else{return h>0}}else if("color"===e.substring(r-5,r)){var p=screen.colorDepth;if(t!==null){if(u==="absolute"){return i&&p>=a||s&&p<a||!i&&!s&&p===a}else{return false}}else{return p>0}}else if("resolution"===e.substring(r-10,r)){var d;if(f==="dpcm"){d=o("1cm")}else{d=o("1in")}if(t!==null){if(u==="resolution"){return i&&d>=a||s&&d<a||!i&&!s&&d===a}else{return false}}else{return d>0}}else{return false}};var a=function(e){var t=e.getValid();var n=e.getExpressions();var r=n.length;if(r>0){for(var i=0;i<r&&t;i++){t=u(n[i].mediaFeature,n[i].value)}var s=e.getNot();return t&&!s||s&&!t}return t};var f=function(e,t){var n=e.getMediaQueries();var i={};for(var s=0;s<n.length;s++){var o=n[s].getMediaType();if(n[s].getExpressions().length===0){continue}var u=true;if(o!=="all"&&t&&t.length>0){u=false;for(var f=0;f<t.length;f++){if(t[f]===o){u=true}}}if(u&&a(n[s])){i[o]=true}}var l=[],c=0;for(var h in i){if(i.hasOwnProperty(h)){if(c>0){l[c++]=","}l[c++]=h}}if(l.length>0){r[r.length]=cssHelper.addStyle("@media "+l.join("")+"{"+e.getCssText()+"}",t,false)}};var l=function(e,t){for(var n=0;n<e.length;n++){f(e[n],t)}};var c=function(e){var t=e.getAttrMediaQueries();var n=false;var i={};for(var s=0;s<t.length;s++){if(a(t[s])){i[t[s].getMediaType()]=t[s].getExpressions().length>0}}var o=[],u=[];for(var f in i){if(i.hasOwnProperty(f)){o[o.length]=f;if(i[f]){u[u.length]=f}if(f==="all"){n=true}}}if(u.length>0){r[r.length]=cssHelper.addStyle(e.getCssText(),u,false)}var c=e.getMediaQueryLists();if(n){l(c)}else{l(c,o)}};var h=function(e){for(var t=0;t<e.length;t++){c(e[t])}if(ua.ie){document.documentElement.style.display="block";setTimeout(function(){document.documentElement.style.display=""},0);setTimeout(function(){cssHelper.broadcast("cssMediaQueriesTested")},100)}else{cssHelper.broadcast("cssMediaQueriesTested")}};var p=function(){for(var e=0;e<r.length;e++){cssHelper.removeStyle(r[e])}r=[];cssHelper.stylesheets(h)};var d=0;var v=function(){var e=cssHelper.getViewportWidth();var t=cssHelper.getViewportHeight();if(ua.ie){var n=document.createElement("div");n.style.position="absolute";n.style.top="-9999em";n.style.overflow="scroll";document.body.appendChild(n);d=n.offsetWidth-n.clientWidth;document.body.removeChild(n)}var r;var s=function(){var n=cssHelper.getViewportWidth();var s=cssHelper.getViewportHeight();if(Math.abs(n-e)>d||Math.abs(s-t)>d){e=n;t=s;clearTimeout(r);r=setTimeout(function(){if(!i()){p()}else{cssHelper.broadcast("cssMediaQueriesTested")}},500)}};window.onresize=function(){var e=window.onresize||function(){};return function(){e();s()}}()};var m=document.documentElement;m.style.marginLeft="-32767px";setTimeout(function(){m.style.marginLeft=""},5e3);return function(){if(!i()){cssHelper.addListener("newStyleParsed",function(e){c(e.cssHelperParsed.stylesheet)});cssHelper.addListener("cssMediaQueriesTested",function(){if(ua.ie){m.style.width="1px"}setTimeout(function(){m.style.width="";m.style.marginLeft=""},0);cssHelper.removeListener("cssMediaQueriesTested",arguments.callee)});s();p()}else{m.style.marginLeft=""}v()}}());try{document.execCommand("BackgroundImageCache",false,true)}catch(e){}
diff --git a/doc/build/html/_static/doctools.js b/doc/build/html/_static/doctools.js
index 8163495..5654977 100644
--- a/doc/build/html/_static/doctools.js
+++ b/doc/build/html/_static/doctools.js
@@ -4,7 +4,7 @@
  *
  * Sphinx JavaScript utilities for all documentation.
  *
- * :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  *
  */
diff --git a/doc/build/html/_static/pygments.css b/doc/build/html/_static/pygments.css
index 8213e90..20c4814 100644
--- a/doc/build/html/_static/pygments.css
+++ b/doc/build/html/_static/pygments.css
@@ -47,8 +47,10 @@
 .highlight .mh { color: #208050 } /* Literal.Number.Hex */
 .highlight .mi { color: #208050 } /* Literal.Number.Integer */
 .highlight .mo { color: #208050 } /* Literal.Number.Oct */
+.highlight .sa { color: #4070a0 } /* Literal.String.Affix */
 .highlight .sb { color: #4070a0 } /* Literal.String.Backtick */
 .highlight .sc { color: #4070a0 } /* Literal.String.Char */
+.highlight .dl { color: #4070a0 } /* Literal.String.Delimiter */
 .highlight .sd { color: #4070a0; font-style: italic } /* Literal.String.Doc */
 .highlight .s2 { color: #4070a0 } /* Literal.String.Double */
 .highlight .se { color: #4070a0; font-weight: bold } /* Literal.String.Escape */
@@ -59,7 +61,9 @@
 .highlight .s1 { color: #4070a0 } /* Literal.String.Single */
 .highlight .ss { color: #517918 } /* Literal.String.Symbol */
 .highlight .bp { color: #007020 } /* Name.Builtin.Pseudo */
+.highlight .fm { color: #06287e } /* Name.Function.Magic */
 .highlight .vc { color: #bb60d5 } /* Name.Variable.Class */
 .highlight .vg { color: #bb60d5 } /* Name.Variable.Global */
 .highlight .vi { color: #bb60d5 } /* Name.Variable.Instance */
+.highlight .vm { color: #bb60d5 } /* Name.Variable.Magic */
 .highlight .il { color: #208050 } /* Literal.Number.Integer.Long */
\ No newline at end of file
diff --git a/doc/build/html/_static/searchtools.js b/doc/build/html/_static/searchtools.js
index bbfb3ac..c821573 100644
--- a/doc/build/html/_static/searchtools.js
+++ b/doc/build/html/_static/searchtools.js
@@ -4,7 +4,7 @@
  *
  * Sphinx JavaScript utilities for the full-text search.
  *
- * :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  *
  */
diff --git a/doc/build/html/_static/websupport.js b/doc/build/html/_static/websupport.js
index 98e7f40..53f6a45 100644
--- a/doc/build/html/_static/websupport.js
+++ b/doc/build/html/_static/websupport.js
@@ -4,7 +4,7 @@
  *
  * sphinx.websupport utilities for all documentation.
  *
- * :copyright: Copyright 2007-2016 by the Sphinx team, see AUTHORS.
+ * :copyright: Copyright 2007-2017 by the Sphinx team, see AUTHORS.
  * :license: BSD, see LICENSE for details.
  *
  */
diff --git a/doc/build/html/cfelpyutils.html b/doc/build/html/cfelpyutils.html
index 7d2a7f3..1845ab9 100644
--- a/doc/build/html/cfelpyutils.html
+++ b/doc/build/html/cfelpyutils.html
@@ -2,16 +2,12 @@
 
 <!doctype html>
 
-
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    
     <title>cfelpyutils package &#8212; cfelpyutils 0.5 documentation</title>
-    
     <link rel="stylesheet" href="_static/bizstyle.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-    
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    './',
@@ -33,7 +29,7 @@
     <script type="text/javascript" src="_static/css3-mediaqueries.js"></script>
     <![endif]-->
   </head>
-  <body role="document">
+  <body>
     <div class="related" role="navigation" aria-label="related navigation">
       <h3>Navigation</h3>
       <ul>
@@ -110,7 +106,7 @@ documentation on the CrystFEL geometry format, see:</p>
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>filename</strong> (<em>str</em>) &#8211; filename of the geometry file</td>
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>filename</strong> (<em>str</em>) – filename of the geometry file</td>
 </tr>
 <tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">dictionary with the geometry loaded from the file</td>
 </tr>
@@ -132,13 +128,13 @@ documentation on the CrystFEL geometry format, see:</p>
 <dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">object</span></code></p>
 <p>Writing of multi-event CXIDB files.</p>
 <p>Implements a simple low-level CXIDB file format writer for multi event files. it allows the user to write data
-&#8220;stacks&#8221; in the CXIDB files, making sure that the entries in all stacks are synchronized.</p>
+“stacks” in the CXIDB files, making sure that the entries in all stacks are synchronized.</p>
 <p>A CXI Writer instance manages one file. A user can add a stack to a CXI Writer instance with the
 add_stack_to_writer function, which also writes the first entry in the stack. The user can then add to the writer
 all the stacks that he wants in the file. Once all stacks are added, the user initializes them  with the
 initialize_stacks function. After initialization, no more stacks can be added. Instead, entries can be appended to
 the existing stacks, using the append_data_to_stack function.</p>
-<p>A &#8220;slice&#8221; (a set of synced entries in all the stacks in the file) can be written to the a file only after an entry
+<p>A “slice” (a set of synced entries in all the stacks in the file) can be written to the a file only after an entry
 has been appended to all stacks in the file. Conversely, after an entry has been appended to a stack, the user
 cannot append another entry before a slice is written. This ensures synchronization of the data in all the stacks.</p>
 <p>A file can be closed at any time. In any case, the writer will not allow a file to contain more than the
@@ -149,32 +145,32 @@ is set to True.</p>
 <p>Example of usage of the stack API:</p>
 <p>c1 = 0
 c2 = 0</p>
-<p>f1 = CXIWriter(&#8216;test1.h5&#8217;, )
-f2 = CXIWriter(&#8216;test2.h5&#8217;, )</p>
+<p>f1 = CXIWriter(‘test1.h5’, )
+f2 = CXIWriter(‘test2.h5’, )</p>
 <dl class="docutils">
-<dt>f1.add_stack_to_writer(&#8216;detector1&#8217;, &#8216;/entry_1/detector_1/data&#8217;, numpy.random.rand(2, 2),</dt>
-<dd>&#8216;frame:y:x&#8217;)</dd>
-<dt>f2.add_stack_to_writer(&#8216;detector2&#8217;, &#8216;/entry_1/detector_1/data&#8217;, numpy.random.rand(3, 2),</dt>
-<dd>&#8216;frame:y:x&#8217;, compression=False, chunk_size=(1,3,2))</dd>
+<dt>f1.add_stack_to_writer(‘detector1’, ‘/entry_1/detector_1/data’, numpy.random.rand(2, 2),</dt>
+<dd>‘frame:y:x’)</dd>
+<dt>f2.add_stack_to_writer(‘detector2’, ‘/entry_1/detector_1/data’, numpy.random.rand(3, 2),</dt>
+<dd>‘frame:y:x’, compression=False, chunk_size=(1,3,2))</dd>
 </dl>
-<p>f1.add_stack_to_writer(&#8216;counter1&#8217;, &#8216;/entry_1/detector_1/count&#8217;, c1)
-f2.add_stack_to_writer(&#8216;counter2&#8217;, &#8216;/entry_1/detector_1/count&#8217;, c2)</p>
-<p>f1.write_simple_entry(&#8216;detectorname1&#8217;, &#8216;/entry_1/detector_1/name&#8217;, &#8216;FrontCSPAD&#8217;)
-f2.write_simple_entry(&#8216;detectorname2&#8217;, &#8216;/entry_1/detector_1/name&#8217;, &#8216;BackCSPAD&#8217;)</p>
+<p>f1.add_stack_to_writer(‘counter1’, ‘/entry_1/detector_1/count’, c1)
+f2.add_stack_to_writer(‘counter2’, ‘/entry_1/detector_1/count’, c2)</p>
+<p>f1.write_simple_entry(‘detectorname1’, ‘/entry_1/detector_1/name’, ‘FrontCSPAD’)
+f2.write_simple_entry(‘detectorname2’, ‘/entry_1/detector_1/name’, ‘BackCSPAD’)</p>
 <p>f1.initialize_stacks()
 f2.initialize_stacks()</p>
 <p>a = numpy.random.rand(2, 2)
 b = numpy.random.rand(3, 2)</p>
 <p>c1 += 1
 c2 += 2</p>
-<p>f1.append_data_to_stack(&#8216;detector1&#8217;, a)
-f2.append_data_to_stack(&#8216;detector2&#8217;, b)</p>
-<p>f1.append_data_to_stack(&#8216;counter1&#8217;, c1)
-f2.append_data_to_stack(&#8216;counter2&#8217;, c2)</p>
+<p>f1.append_data_to_stack(‘detector1’, a)
+f2.append_data_to_stack(‘detector2’, b)</p>
+<p>f1.append_data_to_stack(‘counter1’, c1)
+f2.append_data_to_stack(‘counter2’, c2)</p>
 <p>f1.write_stack_slice_and_increment()
 f2.write_stack_slice_and_increment()</p>
-<p>f1.create_link(&#8216;detectorname1&#8217;, &#8216;/name&#8217;)
-f2.create_link(&#8216;detectorname2&#8217;, &#8216;/name&#8217;)</p>
+<p>f1.create_link(‘detectorname1’, ‘/name’)
+f2.create_link(‘detectorname2’, ‘/name’)</p>
 <p>f1.close_file()
 f2.close_file()</p>
 <dl class="method">
@@ -191,18 +187,18 @@ the stack.</p>
 <col class="field-body" />
 <tbody valign="top">
 <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
-<li><strong>name</strong> (<em>str</em>) &#8211; stack name.</li>
-<li><strong>path</strong> (<em>str</em>) &#8211; path in the hdf5 file where the stack will be written.</li>
-<li><strong></strong><strong>(</strong><strong>Union</strong><strong>[</strong><strong>numpy.ndarray</strong><strong>, </strong><strong>bytes</strong><strong>, </strong><strong>int</strong><strong>, </strong><strong>float</strong><strong>]</strong><strong></strong> (<em>initial_data</em>) &#8211; initial entry in the stack. It gets written to the</li>
-<li><strong>as slice 0. Its characteristics are used to validate all data subsequently appended to the stack.</strong> (<em>stack</em>) &#8211; </li>
-<li><strong>axes</strong> (<em>bytes</em>) &#8211; the &#8216;axes&#8217; attribute for the stack, as defined by the CXIDB file format.</li>
-<li><strong>compression</strong> (<em>Union</em><em>[</em><em>None</em><em>, </em><em>bool</em><em>,</em><em>str</em><em>]</em><em></em>) &#8211; compression parameter for the stack. This parameters works in the same</li>
-<li><strong>as the normal compression parameter from h5py. The default value of this parameter is True.</strong> (<em>way</em>) &#8211; </li>
-<li><strong>chunk_size</strong> (<em>Union</em><em>[</em><em>None</em><em>, </em><em>tuple</em><em>]</em><em></em>) &#8211; HDF5 chuck size for the stack. If this parameter is set to None, the</li>
-<li><strong>writer will compute a chuck size automatically</strong> (<em>CXI</em>) &#8211; </li>
-<li><strong>use the provided tuple to set the chunk size.</strong> (<em>will</em>) &#8211; </li>
-<li><strong>overwrite</strong> (<em>bool</em>) &#8211; if set to True, a stack already existing at the same location will be overwritten. If set</li>
-<li><strong>False</strong><strong>, </strong><strong>an attempt to overwrite a stack will raise an error.</strong> (<em>to</em>) &#8211; </li>
+<li><strong>name</strong> (<em>str</em>) – stack name.</li>
+<li><strong>path</strong> (<em>str</em>) – path in the hdf5 file where the stack will be written.</li>
+<li><strong>(</strong><strong>Union</strong><strong>[</strong><strong>numpy.ndarray</strong><strong>, </strong><strong>bytes</strong><strong>, </strong><strong>int</strong><strong>, </strong><strong>float</strong><strong>]</strong> (<em>initial_data</em>) – initial entry in the stack. It gets written to the</li>
+<li><strong>as slice 0. Its characteristics are used to validate all data subsequently appended to the stack.</strong> (<em>stack</em>) – </li>
+<li><strong>axes</strong> (<em>bytes</em>) – the ‘axes’ attribute for the stack, as defined by the CXIDB file format.</li>
+<li><strong>compression</strong> (<em>Union</em><em>[</em><em>None</em><em>, </em><em>bool</em><em>,</em><em>str</em><em>]</em>) – compression parameter for the stack. This parameters works in the same</li>
+<li><strong>as the normal compression parameter from h5py. The default value of this parameter is True.</strong> (<em>way</em>) – </li>
+<li><strong>chunk_size</strong> (<em>Union</em><em>[</em><em>None</em><em>, </em><em>tuple</em><em>]</em>) – HDF5 chuck size for the stack. If this parameter is set to None, the</li>
+<li><strong>writer will compute a chuck size automatically</strong> (<em>CXI</em>) – </li>
+<li><strong>use the provided tuple to set the chunk size.</strong> (<em>will</em>) – </li>
+<li><strong>overwrite</strong> (<em>bool</em>) – if set to True, a stack already existing at the same location will be overwritten. If set</li>
+<li><strong>False</strong><strong>, </strong><strong>an attempt to overwrite a stack will raise an error.</strong> (<em>to</em>) – </li>
 </ul>
 </td>
 </tr>
@@ -222,9 +218,9 @@ the write_slice_and_increment.</p>
 <col class="field-body" />
 <tbody valign="top">
 <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
-<li><strong>name</strong> (<em>str</em>) &#8211; stack name, defining the stack to which the data will be appended.</li>
-<li><strong></strong><strong>(</strong><strong>Union</strong><strong>[</strong><strong>numpy.ndarray</strong><strong>, </strong><strong>bytes</strong><strong>, </strong><strong>int</strong><strong>, </strong><strong>float</strong><strong>]</strong><strong></strong> (<em>data</em>) &#8211; data to write. The data will be validated against the type</li>
-<li><strong>size of previous entries in the stack.</strong> (<em>and</em>) &#8211; </li>
+<li><strong>name</strong> (<em>str</em>) – stack name, defining the stack to which the data will be appended.</li>
+<li><strong>(</strong><strong>Union</strong><strong>[</strong><strong>numpy.ndarray</strong><strong>, </strong><strong>bytes</strong><strong>, </strong><strong>int</strong><strong>, </strong><strong>float</strong><strong>]</strong> (<em>data</em>) – data to write. The data will be validated against the type</li>
+<li><strong>size of previous entries in the stack.</strong> (<em>and</em>) – </li>
 </ul>
 </td>
 </tr>
@@ -251,10 +247,10 @@ value of the overwrite parameter is True.</p>
 <col class="field-body" />
 <tbody valign="top">
 <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
-<li><strong>name</strong> (<em>str</em>) &#8211; name of the stack or entry to which the link points.</li>
-<li><strong>path</strong> (<em>str</em>) &#8211; path in the hdf5 where the link is created.</li>
-<li><strong>overwrite</strong> (<em>bool</em>) &#8211; if set to True, an entry already existing at the same location will be overwritten. If set</li>
-<li><strong>False</strong><strong>, </strong><strong>an attempt to overwrite an entry will raise an error.</strong> (<em>to</em>) &#8211; </li>
+<li><strong>name</strong> (<em>str</em>) – name of the stack or entry to which the link points.</li>
+<li><strong>path</strong> (<em>str</em>) – path in the hdf5 where the link is created.</li>
+<li><strong>overwrite</strong> (<em>bool</em>) – if set to True, an entry already existing at the same location will be overwritten. If set</li>
+<li><strong>False</strong><strong>, </strong><strong>an attempt to overwrite an entry will raise an error.</strong> (<em>to</em>) – </li>
 </ul>
 </td>
 </tr>
@@ -273,10 +269,10 @@ the specified path, it is deleted and replaced only if the value of the overwrit
 <col class="field-body" />
 <tbody valign="top">
 <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
-<li><strong>group</strong> (<em>str</em>) &#8211; internal HDF5 path of the group to which the link points.</li>
-<li><strong>path</strong> (<em>str</em>) &#8211; path in the hdf5 where the link is created.</li>
-<li><strong>overwrite</strong> (<em>bool</em>) &#8211; if set to True, an entry already existing at the same location will be overwritten. If set</li>
-<li><strong>False</strong><strong>, </strong><strong>an attempt to overwrite an entry will raise an error.</strong> (<em>to</em>) &#8211; </li>
+<li><strong>group</strong> (<em>str</em>) – internal HDF5 path of the group to which the link points.</li>
+<li><strong>path</strong> (<em>str</em>) – path in the hdf5 where the link is created.</li>
+<li><strong>overwrite</strong> (<em>bool</em>) – if set to True, an entry already existing at the same location will be overwritten. If set</li>
+<li><strong>False</strong><strong>, </strong><strong>an attempt to overwrite an entry will raise an error.</strong> (<em>to</em>) – </li>
 </ul>
 </td>
 </tr>
@@ -328,6 +324,42 @@ operations on the file that are not covered by  CXI Writer API. Use it at your o
 stacks can be added to the CXI Writer after initialization.</p>
 </dd></dl>
 
+<dl class="method">
+<dt id="cfelpyutils.cfel_cxi.CXIWriter.is_entry_in_file">
+<code class="descname">is_entry_in_file</code><span class="sig-paren">(</span><em>path</em><span class="sig-paren">)</span><a class="headerlink" href="#cfelpyutils.cfel_cxi.CXIWriter.is_entry_in_file" title="Permalink to this definition">¶</a></dt>
+<dd><p>Checks if an entry is already present in the file.</p>
+<p>Checks if an entry is already present in the file at the path provided by the user. It will return True if
+either a dataset or a group are present at the specified path</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>path</strong> (<em>str</em>) – the path where to check for a dataset or group</td>
+</tr>
+</tbody>
+</table>
+<p>Results:</p>
+<blockquote>
+<div>ret (bool): True if a group or dataset can be found in the file, False otherwise</div></blockquote>
+</dd></dl>
+
+<dl class="method">
+<dt id="cfelpyutils.cfel_cxi.CXIWriter.num_slices_in_file">
+<code class="descname">num_slices_in_file</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#cfelpyutils.cfel_cxi.CXIWriter.num_slices_in_file" title="Permalink to this definition">¶</a></dt>
+<dd><p>Returns the number of slices already written in the file</p>
+<p>Returns the number of slices that have already been written in the file.</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Returns:</th><td class="field-body">number of writter slices</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Return type:</th><td class="field-body">status (num_slices)</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
 <dl class="method">
 <dt id="cfelpyutils.cfel_cxi.CXIWriter.stacks_are_initialized">
 <code class="descname">stacks_are_initialized</code><span class="sig-paren">(</span><span class="sig-paren">)</span><a class="headerlink" href="#cfelpyutils.cfel_cxi.CXIWriter.stacks_are_initialized" title="Permalink to this definition">¶</a></dt>
@@ -357,11 +389,11 @@ operations (for example, creating a link).</p>
 <col class="field-body" />
 <tbody valign="top">
 <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first last simple">
-<li><strong>name</strong> (<em>str</em>) &#8211; entry name</li>
-<li><strong>path</strong> (<em>str</em>) &#8211; path in the hdf5 file where the entry will be written.</li>
-<li><strong>data</strong> (<em>Union</em><em>[</em><em>numpy.ndarray</em><em>, </em><em>bytes</em><em>, </em><em>int</em><em>, </em><em>float</em><em>]</em><em></em>) &#8211; data to write</li>
-<li><strong>overwrite</strong> (<em>bool</em>) &#8211; if set to True, an entry already existing at the same location will be overwritten. If set</li>
-<li><strong>False</strong><strong>, </strong><strong>an attempt to overwrite an entry will raise an error.</strong> (<em>to</em>) &#8211; </li>
+<li><strong>name</strong> (<em>str</em>) – entry name</li>
+<li><strong>path</strong> (<em>str</em>) – path in the hdf5 file where the entry will be written.</li>
+<li><strong>data</strong> (<em>Union</em><em>[</em><em>numpy.ndarray</em><em>, </em><em>bytes</em><em>, </em><em>int</em><em>, </em><em>float</em><em>]</em>) – data to write</li>
+<li><strong>overwrite</strong> (<em>bool</em>) – if set to True, an entry already existing at the same location will be overwritten. If set</li>
+<li><strong>False</strong><strong>, </strong><strong>an attempt to overwrite an entry will raise an error.</strong> (<em>to</em>) – </li>
 </ul>
 </td>
 </tr>
@@ -397,7 +429,7 @@ it (See the documentation of the fabio python module).</p>
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>stream</strong> (<em>str</em>) &#8211; a data string buffer received from the PETRAIII P11 sender.</td>
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>stream</strong> (<em>str</em>) – a data string buffer received from the PETRAIII P11 sender.</td>
 </tr>
 <tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body"><dl class="docutils">
 <dt>a cbfimage object containing the data extracted</dt>
@@ -417,11 +449,53 @@ it (See the documentation of the fabio python module).</p>
 <p>Utilities for CrystFEL-style geometry files.</p>
 <p>This module contains utilities for the processing of CrystFEL-style geometry
 files.</p>
+<dl class="class">
+<dt id="cfelpyutils.cfel_geom.ImageShape">
+<em class="property">class </em><code class="descclassname">cfelpyutils.cfel_geom.</code><code class="descname">ImageShape</code><span class="sig-paren">(</span><em>ss</em>, <em>fs</em><span class="sig-paren">)</span><a class="headerlink" href="#cfelpyutils.cfel_geom.ImageShape" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">tuple</span></code></p>
+<dl class="attribute">
+<dt id="cfelpyutils.cfel_geom.ImageShape.fs">
+<code class="descname">fs</code><a class="headerlink" href="#cfelpyutils.cfel_geom.ImageShape.fs" title="Permalink to this definition">¶</a></dt>
+<dd><p>Alias for field number 1</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="cfelpyutils.cfel_geom.ImageShape.ss">
+<code class="descname">ss</code><a class="headerlink" href="#cfelpyutils.cfel_geom.ImageShape.ss" title="Permalink to this definition">¶</a></dt>
+<dd><p>Alias for field number 0</p>
+</dd></dl>
+
+</dd></dl>
+
+<dl class="class">
+<dt id="cfelpyutils.cfel_geom.PixelMaps">
+<em class="property">class </em><code class="descclassname">cfelpyutils.cfel_geom.</code><code class="descname">PixelMaps</code><span class="sig-paren">(</span><em>x</em>, <em>y</em>, <em>r</em><span class="sig-paren">)</span><a class="headerlink" href="#cfelpyutils.cfel_geom.PixelMaps" title="Permalink to this definition">¶</a></dt>
+<dd><p>Bases: <code class="xref py py-class docutils literal"><span class="pre">tuple</span></code></p>
+<dl class="attribute">
+<dt id="cfelpyutils.cfel_geom.PixelMaps.r">
+<code class="descname">r</code><a class="headerlink" href="#cfelpyutils.cfel_geom.PixelMaps.r" title="Permalink to this definition">¶</a></dt>
+<dd><p>Alias for field number 2</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="cfelpyutils.cfel_geom.PixelMaps.x">
+<code class="descname">x</code><a class="headerlink" href="#cfelpyutils.cfel_geom.PixelMaps.x" title="Permalink to this definition">¶</a></dt>
+<dd><p>Alias for field number 0</p>
+</dd></dl>
+
+<dl class="attribute">
+<dt id="cfelpyutils.cfel_geom.PixelMaps.y">
+<code class="descname">y</code><a class="headerlink" href="#cfelpyutils.cfel_geom.PixelMaps.y" title="Permalink to this definition">¶</a></dt>
+<dd><p>Alias for field number 1</p>
+</dd></dl>
+
+</dd></dl>
+
 <dl class="function">
 <dt id="cfelpyutils.cfel_geom.apply_geometry_from_file">
 <code class="descclassname">cfelpyutils.cfel_geom.</code><code class="descname">apply_geometry_from_file</code><span class="sig-paren">(</span><em>data_as_slab</em>, <em>geometry_filename</em><span class="sig-paren">)</span><a class="headerlink" href="#cfelpyutils.cfel_geom.apply_geometry_from_file" title="Permalink to this definition">¶</a></dt>
 <dd><p>Parses a geometry file and applies the geometry to data.</p>
-<p>Parses a geometry file and applies the geometry to detector data in &#8216;slab&#8217; format. Turns a 2d array of pixel
+<p>Parses a geometry file and applies the geometry to detector data in ‘slab’ format. Turns a 2d array of pixel
 values into an array containing a representation of the physical layout of the detector, keeping the origin of
 the reference system at the beam interaction point.</p>
 <table class="docutils field-list" frame="void" rules="none">
@@ -429,8 +503,8 @@ the reference system at the beam interaction point.</p>
 <col class="field-body" />
 <tbody valign="top">
 <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
-<li><strong>data_as_slab</strong> (<em>numpy.ndarray</em>) &#8211; the pixel values to which geometry is to be applied.</li>
-<li><strong>geometry_filename</strong> (<em>str</em>) &#8211; geometry filename.</li>
+<li><strong>data_as_slab</strong> (<em>numpy.ndarray</em>) – the pixel values to which geometry is to be applied.</li>
+<li><strong>geometry_filename</strong> (<em>str</em>) – geometry filename.</li>
 </ul>
 </td>
 </tr>
@@ -447,9 +521,9 @@ detector, with the origin of the  reference system at the beam interaction point
 
 <dl class="function">
 <dt id="cfelpyutils.cfel_geom.apply_geometry_from_pixel_maps">
-<code class="descclassname">cfelpyutils.cfel_geom.</code><code class="descname">apply_geometry_from_pixel_maps</code><span class="sig-paren">(</span><em>data_as_slab</em>, <em>yx</em>, <em>im_out=None</em><span class="sig-paren">)</span><a class="headerlink" href="#cfelpyutils.cfel_geom.apply_geometry_from_pixel_maps" title="Permalink to this definition">¶</a></dt>
+<code class="descclassname">cfelpyutils.cfel_geom.</code><code class="descname">apply_geometry_from_pixel_maps</code><span class="sig-paren">(</span><em>data_as_slab</em>, <em>y</em>, <em>x</em>, <em>im_out=None</em><span class="sig-paren">)</span><a class="headerlink" href="#cfelpyutils.cfel_geom.apply_geometry_from_pixel_maps" title="Permalink to this definition">¶</a></dt>
 <dd><p>Applies geometry in pixel map format to data.</p>
-<p>Applies geometry, in the form of pixel maps, to detector data in &#8216;slab&#8217; format. Turns a 2d array of pixel values
+<p>Applies geometry, in the form of pixel maps, to detector data in ‘slab’ format. Turns a 2d array of pixel values
 into an array containing a representation of the physical layout of the detector, keeping the origin of the
 reference system at the beam interaction point.</p>
 <table class="docutils field-list" frame="void" rules="none">
@@ -457,10 +531,11 @@ reference system at the beam interaction point.</p>
 <col class="field-body" />
 <tbody valign="top">
 <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
-<li><strong>data_as_slab</strong> (<em>numpy.ndarray</em>) &#8211; the pixel values to which geometry is to be applied.</li>
-<li><strong>yx</strong> (<em>tuple</em>) &#8211; the yx pixel maps describing the geometry of the detector; each map is a numpy.ndarray.</li>
-<li><strong>im_out</strong> (<em>Optional</em><em>[</em><em>numpy.ndarray</em><em>]</em><em></em>) &#8211; array to hold the output; if not provided, one will be generated</li>
-<li><strong>automatically.</strong> &#8211; </li>
+<li><strong>data_as_slab</strong> (<em>numpy.ndarray</em>) – the pixel values to which geometry is to be applied.</li>
+<li><strong>y</strong> (<em>numpy.ndarray</em>) – the y pixel map describing the geometry of the detector</li>
+<li><strong>x</strong> (<em>numpy.ndarray</em>) – the x pixel map describing the geometry of the detector</li>
+<li><strong>im_out</strong> (<em>Optional</em><em>[</em><em>numpy.ndarray</em><em>]</em>) – array to hold the output; if not provided, one will be generated</li>
+<li><strong>automatically.</strong> – </li>
 </ul>
 </td>
 </tr>
@@ -475,27 +550,47 @@ detector, with the origin of the  reference system at the beam interaction point
 </table>
 </dd></dl>
 
+<dl class="function">
+<dt id="cfelpyutils.cfel_geom.get_image_shape">
+<code class="descclassname">cfelpyutils.cfel_geom.</code><code class="descname">get_image_shape</code><span class="sig-paren">(</span><em>geometry_filename</em><span class="sig-paren">)</span><a class="headerlink" href="#cfelpyutils.cfel_geom.get_image_shape" title="Permalink to this definition">¶</a></dt>
+<dd><p>Parses a geometry file and returns the minimum size of an image that can represent the detector.</p>
+<p>Parses the geometry file and return a numpy shape object representing the minimum size of an image that
+can contain the physical representation of the detector. The representation is centered at the point where the beam
+hits the detector according to the geometry in the file.</p>
+<table class="docutils field-list" frame="void" rules="none">
+<col class="field-name" />
+<col class="field-body" />
+<tbody valign="top">
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>geometry_filename</strong> (<em>str</em>) – geometry filename.</td>
+</tr>
+<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">shape of the array needed to contain the representation of the physical layout
+of the detector.</td>
+</tr>
+<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">img_shape tuple (int, int)</td>
+</tr>
+</tbody>
+</table>
+</dd></dl>
+
 <dl class="function">
 <dt id="cfelpyutils.cfel_geom.pixel_maps_for_image_view">
 <code class="descclassname">cfelpyutils.cfel_geom.</code><code class="descname">pixel_maps_for_image_view</code><span class="sig-paren">(</span><em>geometry_filename</em><span class="sig-paren">)</span><a class="headerlink" href="#cfelpyutils.cfel_geom.pixel_maps_for_image_view" title="Permalink to this definition">¶</a></dt>
 <dd><p>Parses a geometry file and creates pixel maps for pyqtgraph visualization.</p>
-<p>Parse the geometry file and creates pixel maps for an  array in &#8216;slab&#8217; format containing pixel values. The pixel
+<p>Parses the geometry file and creates pixel maps for an  array in ‘slab’ format containing pixel values. The pixel
 maps can be used to create a representation of the physical layout of the detector in a pyqtgraph ImageView
 widget (i.e. they apply the detector geometry setting the origin of the reference system is in the top left corner
-of the output array).</p>
+of the output array). The representation is centered at the point where the beam hits the detector according to
+the geometry in the file.</p>
 <table class="docutils field-list" frame="void" rules="none">
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>geometry_filename</strong> (<em>str</em>) &#8211; geometry filename.</td>
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>geometry_filename</strong> (<em>str</em>) – geometry filename.</td>
 </tr>
-<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">pixel maps<p>slab_shape tuple (int, int): shape of the original geometry uncorrected array (the pixel values in &#8220;slab&#8221;
-format).</p>
-<p>img_shape tuple (int, int): shape of the array needed to contain the representation of the physical layout
-of the detector.</p>
+<tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">pixel map for x coordinate<p>y (numpy.ndarray int): pixel map for x coordinate</p>
 </td>
 </tr>
-<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">(y, x) (numpy.ndarray int, numpy.ndarray int)</td>
+<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference internal" href="#cfelpyutils.cfel_geom.PixelMaps.x" title="cfelpyutils.cfel_geom.PixelMaps.x">x</a> (numpy.ndarray int)</td>
 </tr>
 </tbody>
 </table>
@@ -512,12 +607,12 @@ point.</p>
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>fnam</strong> (<em>str</em>) &#8211; geometry filename.</td>
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>fnam</strong> (<em>str</em>) – geometry filename.</td>
 </tr>
 <tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">slab-like pixel maps with
 respectively x, y coordinates of the pixel and distance of the pixel from the center of the reference system.</td>
 </tr>
-<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body">x,y,r (numpy.ndarray float, numpy.ndarray float, numpy.ndarray float)</td>
+<tr class="field-odd field"><th class="field-name">Return type:</th><td class="field-body"><a class="reference internal" href="#cfelpyutils.cfel_geom.PixelMaps.x" title="cfelpyutils.cfel_geom.PixelMaps.x">x</a>,<a class="reference internal" href="#cfelpyutils.cfel_geom.PixelMaps.y" title="cfelpyutils.cfel_geom.PixelMaps.y">y</a>,<a class="reference internal" href="#cfelpyutils.cfel_geom.PixelMaps.r" title="cfelpyutils.cfel_geom.PixelMaps.r">r</a> (numpy.ndarray float, numpy.ndarray float, numpy.ndarray float)</td>
 </tr>
 </tbody>
 </table>
@@ -538,8 +633,8 @@ on what the h5py module already provides.</p>
 <col class="field-body" />
 <tbody valign="top">
 <tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><ul class="first simple">
-<li><strong>data_filename</strong> (<em>str</em>) &#8211; filename of the file to read.</li>
-<li><strong>data_group</strong> (<em>str</em>) &#8211; internal HDF5 path of the data block to read.</li>
+<li><strong>data_filename</strong> (<em>str</em>) – filename of the file to read.</li>
+<li><strong>data_group</strong> (<em>str</em>) – internal HDF5 path of the data block to read.</li>
 </ul>
 </td>
 </tr>
@@ -599,7 +694,7 @@ the parser tries to interpret the entry in order as:</p>
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>config</strong> (<em>class RawConfigParser</em>) &#8211; ConfigParser instance.</td>
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>config</strong> (<em>class RawConfigParser</em>) – ConfigParser instance.</td>
 </tr>
 <tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">dictionary with the same structure as the input dictionary, but with correct types
 assigned to each entry.</td>
@@ -619,13 +714,13 @@ assigned to each entry.</td>
 <dt id="cfelpyutils.cfel_psana.dirname_from_source_runs">
 <code class="descclassname">cfelpyutils.cfel_psana.</code><code class="descname">dirname_from_source_runs</code><span class="sig-paren">(</span><em>source</em><span class="sig-paren">)</span><a class="headerlink" href="#cfelpyutils.cfel_psana.dirname_from_source_runs" title="Permalink to this definition">¶</a></dt>
 <dd><p>Returns a directory name based on a psana source string.</p>
-<p>Takes a psana source string (e.g exp=CXI/cxix....) and returns a string that can be used as a subdirectory name or
+<p>Takes a psana source string (e.g exp=CXI/cxix….) and returns a string that can be used as a subdirectory name or
 a prefix for files and directories.</p>
 <table class="docutils field-list" frame="void" rules="none">
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>source</strong> (<em>str</em>) &#8211; a psana source string (e.g. exp=CXI/cxi....).</td>
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>source</strong> (<em>str</em>) – a psana source string (e.g. exp=CXI/cxi….).</td>
 </tr>
 <tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">a string that can be used as a filename or a prefix .</td>
 </tr>
@@ -639,13 +734,13 @@ a prefix for files and directories.</p>
 <dt id="cfelpyutils.cfel_psana.psana_event_inspection">
 <code class="descclassname">cfelpyutils.cfel_psana.</code><code class="descname">psana_event_inspection</code><span class="sig-paren">(</span><em>source</em><span class="sig-paren">)</span><a class="headerlink" href="#cfelpyutils.cfel_psana.psana_event_inspection" title="Permalink to this definition">¶</a></dt>
 <dd><p>Prints the structure of psana events.</p>
-<p>Takes a psana source string (e.g. exp=CXI/cxix....) and inspects the structure of the first event in the data,
+<p>Takes a psana source string (e.g. exp=CXI/cxix….) and inspects the structure of the first event in the data,
 printing information about the the content of the event.</p>
 <table class="docutils field-list" frame="void" rules="none">
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>source</strong> (<em>str</em>) &#8211; a psana source string (e.g. exp=CXI/cxix....).</td>
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>source</strong> (<em>str</em>) – a psana source string (e.g. exp=CXI/cxix….).</td>
 </tr>
 </tbody>
 </table>
@@ -660,7 +755,7 @@ printing information about the the content of the event.</p>
 <col class="field-name" />
 <col class="field-body" />
 <tbody valign="top">
-<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>name</strong> (<em>str</em>) &#8211; a string describing a python type.</td>
+<tr class="field-odd field"><th class="field-name">Parameters:</th><td class="field-body"><strong>name</strong> (<em>str</em>) – a string describing a python type.</td>
 </tr>
 <tr class="field-even field"><th class="field-name">Returns:</th><td class="field-body">the python type described by the string.</td>
 </tr>
@@ -705,7 +800,7 @@ python to work with several file format used in x-ray imaging).</p>
     </div>
     <div class="footer" role="contentinfo">
         &#169; Copyright 2016, CFEL Team.
-      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.5.1.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.3.
     </div>
   </body>
 </html>
\ No newline at end of file
diff --git a/doc/build/html/genindex.html b/doc/build/html/genindex.html
index 0fba7bf..0d9e625 100644
--- a/doc/build/html/genindex.html
+++ b/doc/build/html/genindex.html
@@ -3,16 +3,12 @@
 
 <!doctype html>
 
-
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    
     <title>Index &#8212; cfelpyutils 0.5 documentation</title>
-    
     <link rel="stylesheet" href="_static/bizstyle.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-    
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    './',
@@ -34,7 +30,7 @@
     <script type="text/javascript" src="_static/css3-mediaqueries.js"></script>
     <![endif]-->
   </head>
-  <body role="document">
+  <body>
     <div class="related" role="navigation" aria-label="related navigation">
       <h3>Navigation</h3>
       <ul>
@@ -81,10 +77,13 @@
  | <a href="#G"><strong>G</strong></a>
  | <a href="#I"><strong>I</strong></a>
  | <a href="#L"><strong>L</strong></a>
+ | <a href="#N"><strong>N</strong></a>
  | <a href="#P"><strong>P</strong></a>
  | <a href="#R"><strong>R</strong></a>
  | <a href="#S"><strong>S</strong></a>
  | <a href="#W"><strong>W</strong></a>
+ | <a href="#X"><strong>X</strong></a>
+ | <a href="#Y"><strong>Y</strong></a>
  
 </div>
 <h2 id="A">A</h2>
@@ -147,6 +146,10 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="cfelpyutils.html#cfelpyutils.cfel_cxi.CXIWriter.file_is_full">file_is_full() (cfelpyutils.cfel_cxi.CXIWriter method)</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="cfelpyutils.html#cfelpyutils.cfel_geom.ImageShape.fs">fs (cfelpyutils.cfel_geom.ImageShape attribute)</a>
 </li>
   </ul></td>
 </tr></table>
@@ -155,14 +158,24 @@
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="cfelpyutils.html#cfelpyutils.cfel_cxi.CXIWriter.get_file_handle">get_file_handle() (cfelpyutils.cfel_cxi.CXIWriter method)</a>
+</li>
+  </ul></td>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="cfelpyutils.html#cfelpyutils.cfel_geom.get_image_shape">get_image_shape() (in module cfelpyutils.cfel_geom)</a>
 </li>
   </ul></td>
 </tr></table>
 
 <h2 id="I">I</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="cfelpyutils.html#cfelpyutils.cfel_geom.ImageShape">ImageShape (class in cfelpyutils.cfel_geom)</a>
+</li>
+  </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="cfelpyutils.html#cfelpyutils.cfel_cxi.CXIWriter.initialize_stacks">initialize_stacks() (cfelpyutils.cfel_cxi.CXIWriter method)</a>
+</li>
+      <li><a href="cfelpyutils.html#cfelpyutils.cfel_cxi.CXIWriter.is_entry_in_file">is_entry_in_file() (cfelpyutils.cfel_cxi.CXIWriter method)</a>
 </li>
   </ul></td>
 </tr></table>
@@ -179,16 +192,26 @@
   </ul></td>
 </tr></table>
 
+<h2 id="N">N</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="cfelpyutils.html#cfelpyutils.cfel_cxi.CXIWriter.num_slices_in_file">num_slices_in_file() (cfelpyutils.cfel_cxi.CXIWriter method)</a>
+</li>
+  </ul></td>
+</tr></table>
+
 <h2 id="P">P</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="cfelpyutils.html#cfelpyutils.cfel_optarg.parse_parameters">parse_parameters() (in module cfelpyutils.cfel_optarg)</a>
 </li>
       <li><a href="cfelpyutils.html#cfelpyutils.cfel_geom.pixel_maps_for_image_view">pixel_maps_for_image_view() (in module cfelpyutils.cfel_geom)</a>
+</li>
+      <li><a href="cfelpyutils.html#cfelpyutils.cfel_geom.pixel_maps_from_geometry_file">pixel_maps_from_geometry_file() (in module cfelpyutils.cfel_geom)</a>
 </li>
   </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
-      <li><a href="cfelpyutils.html#cfelpyutils.cfel_geom.pixel_maps_from_geometry_file">pixel_maps_from_geometry_file() (in module cfelpyutils.cfel_geom)</a>
+      <li><a href="cfelpyutils.html#cfelpyutils.cfel_geom.PixelMaps">PixelMaps (class in cfelpyutils.cfel_geom)</a>
 </li>
       <li><a href="cfelpyutils.html#cfelpyutils.cfel_psana.psana_event_inspection">psana_event_inspection() (in module cfelpyutils.cfel_psana)</a>
 </li>
@@ -199,6 +222,10 @@
 
 <h2 id="R">R</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="cfelpyutils.html#cfelpyutils.cfel_geom.PixelMaps.r">r (cfelpyutils.cfel_geom.PixelMaps attribute)</a>
+</li>
+  </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="cfelpyutils.html#cfelpyutils.cfel_fabio.read_cbf_from_stream">read_cbf_from_stream() (in module cfelpyutils.cfel_fabio)</a>
 </li>
@@ -207,6 +234,10 @@
 
 <h2 id="S">S</h2>
 <table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="cfelpyutils.html#cfelpyutils.cfel_geom.ImageShape.ss">ss (cfelpyutils.cfel_geom.ImageShape attribute)</a>
+</li>
+  </ul></td>
   <td style="width: 33%; vertical-align: top;"><ul>
       <li><a href="cfelpyutils.html#cfelpyutils.cfel_cxi.CXIWriter.stacks_are_initialized">stacks_are_initialized() (cfelpyutils.cfel_cxi.CXIWriter method)</a>
 </li>
@@ -225,6 +256,22 @@
   </ul></td>
 </tr></table>
 
+<h2 id="X">X</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="cfelpyutils.html#cfelpyutils.cfel_geom.PixelMaps.x">x (cfelpyutils.cfel_geom.PixelMaps attribute)</a>
+</li>
+  </ul></td>
+</tr></table>
+
+<h2 id="Y">Y</h2>
+<table style="width: 100%" class="indextable genindextable"><tr>
+  <td style="width: 33%; vertical-align: top;"><ul>
+      <li><a href="cfelpyutils.html#cfelpyutils.cfel_geom.PixelMaps.y">y (cfelpyutils.cfel_geom.PixelMaps attribute)</a>
+</li>
+  </ul></td>
+</tr></table>
+
 
 
           </div>
@@ -246,7 +293,7 @@
     </div>
     <div class="footer" role="contentinfo">
         &#169; Copyright 2016, CFEL Team.
-      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.5.1.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.3.
     </div>
   </body>
 </html>
\ No newline at end of file
diff --git a/doc/build/html/index.html b/doc/build/html/index.html
index a6a7ca4..24135d0 100644
--- a/doc/build/html/index.html
+++ b/doc/build/html/index.html
@@ -2,16 +2,12 @@
 
 <!doctype html>
 
-
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    
     <title>Welcome to cfelpyutils’s documentation! &#8212; cfelpyutils 0.5 documentation</title>
-    
     <link rel="stylesheet" href="_static/bizstyle.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-    
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    './',
@@ -33,7 +29,7 @@
     <script type="text/javascript" src="_static/css3-mediaqueries.js"></script>
     <![endif]-->
   </head>
-  <body role="document">
+  <body>
     <div class="related" role="navigation" aria-label="related navigation">
       <h3>Navigation</h3>
       <ul>
@@ -50,7 +46,7 @@
         <div class="sphinxsidebarwrapper">
   <h3><a href="#">Table Of Contents</a></h3>
   <ul>
-<li><a class="reference internal" href="#">Welcome to cfelpyutils&#8217;s documentation!</a></li>
+<li><a class="reference internal" href="#">Welcome to cfelpyutils’s documentation!</a></li>
 <li><a class="reference internal" href="#indices-and-tables">Indices and tables</a></li>
 </ul>
 
@@ -80,7 +76,7 @@
           <div class="body" role="main">
             
   <div class="section" id="welcome-to-cfelpyutils-s-documentation">
-<h1>Welcome to cfelpyutils&#8217;s documentation!<a class="headerlink" href="#welcome-to-cfelpyutils-s-documentation" title="Permalink to this headline">¶</a></h1>
+<h1>Welcome to cfelpyutils’s documentation!<a class="headerlink" href="#welcome-to-cfelpyutils-s-documentation" title="Permalink to this headline">¶</a></h1>
 <p>Contents:</p>
 <div class="toctree-wrapper compound">
 </div>
@@ -114,7 +110,7 @@
     </div>
     <div class="footer" role="contentinfo">
         &#169; Copyright 2016, CFEL Team.
-      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.5.1.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.3.
     </div>
   </body>
 </html>
\ No newline at end of file
diff --git a/doc/build/html/modules.html b/doc/build/html/modules.html
index f1a6dd5..ab88216 100644
--- a/doc/build/html/modules.html
+++ b/doc/build/html/modules.html
@@ -2,16 +2,12 @@
 
 <!doctype html>
 
-
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    
     <title>cfelpyutils &#8212; cfelpyutils 0.5 documentation</title>
-    
     <link rel="stylesheet" href="_static/bizstyle.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-    
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    './',
@@ -33,7 +29,7 @@
     <script type="text/javascript" src="_static/css3-mediaqueries.js"></script>
     <![endif]-->
   </head>
-  <body role="document">
+  <body>
     <div class="related" role="navigation" aria-label="related navigation">
       <h3>Navigation</h3>
       <ul>
@@ -113,7 +109,7 @@
     </div>
     <div class="footer" role="contentinfo">
         &#169; Copyright 2016, CFEL Team.
-      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.5.1.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.3.
     </div>
   </body>
 </html>
\ No newline at end of file
diff --git a/doc/build/html/objects.inv b/doc/build/html/objects.inv
index 8ee46f78e15a12170b6850d5ea93acc4751f053c..58c022b672f3c592ec4e297d5730487d69699b63 100644
GIT binary patch
delta 614
zcmV-s0-61X1=t0UeSep|Zrd;rfOkKIigY!R4q38x@(>_EhIAv&;z?pdkpxL4R;Rv3
zU$0NnqbSQx?Zu=PK_+=0@BiewL1o7wNaZU#KK4co3ak67KCQDZ^y)6{Y`<39&G}w@
z=d~MspqFw2QwGHHi??Wc3~r3zX3%wzMpxf1(bt&=S)kBCvVZSCcCStbbP-c4@cx#&
zPvQ)O;66b8#)IJ>3zAIhjL2nLi&}620U~w67ei}hJn}}8zlu=~As|;$zpcrNwzkd;
zwip_%<kItIP^uW#Vwl{<JJ4bU?@29#1SNlAimWdudXAb(iA%jsfc4OGuVjsWHDofC
zgQLJK4iLrIsej_Qm%XI`O-@(~Io0&!1Ws`$r72T;x*>z#z+RgCel>|RsuSv-`-V5p
zP;>(Q?z4JlY`po(L}|9`p~aUDEZ*Ke{{ygQ%6|yK$^8&8o8wD3&+>rk39QewXOU-a
z4K3JV70OsZp&6vcWk{!_J2rx>l)Fl_QCHs2j?d%9{(mfE9&mrm$UM+V8QvH-Gv6hC
ztb>g9o~+MxWha`4{OXO;={rnYa1Q1$#N~XIj1A!0e5H~+BZcS#g`PkzLYJ2j)`Nz8
zRVHyJq|>Ct+-c3=Xa=}J7ih$$C&zahAT&z6#RMq@n*GmZ9!TBZ$g6x1kHXZ|_VVoc
zLS<<dQeQD_TGUbtJWPTL_Vl-aM31XUZWmuSr(-k!?8Gaon#!OG=KPYszyJ7(4i9n2
zLbTw^hC+4aK09uY8wvQ7Vx4YI;r(RWymVpL#v{18`%F)3>Fi6|e~z~Q1EibmE^s?H
A1ONa4

delta 533
zcmV+w0_y$P1&0NYeSem*j@vK{hIc=Oix%h<qaC{3+UbS@2Xwe@0wd8jd$J@*@?G4g
zFJ(D)4#{$I7DJ}QPd`bMiEL53X^f;p?WTvps!?P8t(Kd;>Eob3=bgis`cPf&rL~ZL
z3XvE435~X();H0i9WeSSf!oo@NY>QfuhF-eC)y$CM9t4XkAKgeBKm}p8bbKU-J5#@
zN{J9bzKCeW+lu7SdaFvA&Y@94L4-t|@w=f?+km1a&ev{~M~EminU{OAQmmb~quUKl
zQ3?v89kt#K>oCq~6FnGphwPD|NTBH-=E{cM#EcQ(Ip`Ixc4OzSSp*s!2ajgy)q5c4
zehHc+3eG8u=6|nX;2R3~EgZ>~&w|;#;ct*9)3Ft;w*$-L_n~MmrJ+_XCV8jk*V8&3
zv!Zj?7U{W3badkF0bD5OZVb^{FKB=c#Vg_4eUM4!Cb~2Oy=s4yS0s7o-!0?7dswoU
z%;l1-i{QI*QQ5y?K|Ij;37jJIWrcJB43tZm-5W*Tuz!f9d+g}Bul;CtC~D@Xz*im$
zJRX9>4A~2`$G>Zjlj%Olt3y-|%F6n1efH8&JDzXc3{{7QjKb6GsNu+equBLq&3=z*
zS#8G_{>6!B)RNnvj`s4Buc79nV;Y-~^na?jP&aOK)8V|4aldk<^S!ya?;=}FS5Z{~
X!OQ+VJr3LQ+248pDMkJte~{u%H3S>u

diff --git a/doc/build/html/py-modindex.html b/doc/build/html/py-modindex.html
index 47a2c1e..d314a49 100644
--- a/doc/build/html/py-modindex.html
+++ b/doc/build/html/py-modindex.html
@@ -2,16 +2,12 @@
 
 <!doctype html>
 
-
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    
     <title>Python Module Index &#8212; cfelpyutils 0.5 documentation</title>
-    
     <link rel="stylesheet" href="_static/bizstyle.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-    
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    './',
@@ -36,7 +32,7 @@
 
 
   </head>
-  <body role="document">
+  <body>
     <div class="related" role="navigation" aria-label="related navigation">
       <h3>Navigation</h3>
       <ul>
@@ -143,7 +139,7 @@
     </div>
     <div class="footer" role="contentinfo">
         &#169; Copyright 2016, CFEL Team.
-      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.5.1.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.3.
     </div>
   </body>
 </html>
\ No newline at end of file
diff --git a/doc/build/html/search.html b/doc/build/html/search.html
index 0132947..69f4a4c 100644
--- a/doc/build/html/search.html
+++ b/doc/build/html/search.html
@@ -2,16 +2,12 @@
 
 <!doctype html>
 
-
 <html xmlns="http://www.w3.org/1999/xhtml">
   <head>
     <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
-    
     <title>Search &#8212; cfelpyutils 0.5 documentation</title>
-    
     <link rel="stylesheet" href="_static/bizstyle.css" type="text/css" />
     <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
-    
     <script type="text/javascript">
       var DOCUMENTATION_OPTIONS = {
         URL_ROOT:    './',
@@ -41,7 +37,7 @@
     <![endif]-->
 
   </head>
-  <body role="document">
+  <body>
     <div class="related" role="navigation" aria-label="related navigation">
       <h3>Navigation</h3>
       <ul>
@@ -107,7 +103,7 @@
     </div>
     <div class="footer" role="contentinfo">
         &#169; Copyright 2016, CFEL Team.
-      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.5.1.
+      Created using <a href="http://sphinx-doc.org/">Sphinx</a> 1.6.3.
     </div>
   </body>
 </html>
\ No newline at end of file
diff --git a/doc/build/html/searchindex.js b/doc/build/html/searchindex.js
index 113258d..87f178a 100644
--- a/doc/build/html/searchindex.js
+++ b/doc/build/html/searchindex.js
@@ -1 +1 @@
-Search.setIndex({docnames:["cfelpyutils","index","modules"],envversion:51,filenames:["cfelpyutils.rst","index.rst","modules.rst"],objects:{"":{cfelpyutils:[0,0,0,"-"]},"cfelpyutils.cfel_crystfel":{load_crystfel_geometry:[0,1,1,""]},"cfelpyutils.cfel_cxi":{CXIWriter:[0,2,1,""]},"cfelpyutils.cfel_cxi.CXIWriter":{add_stack_to_writer:[0,3,1,""],append_data_to_stack:[0,3,1,""],close_file:[0,3,1,""],create_link:[0,3,1,""],create_link_to_group:[0,3,1,""],file_is_full:[0,3,1,""],get_file_handle:[0,3,1,""],initialize_stacks:[0,3,1,""],stacks_are_initialized:[0,3,1,""],write_simple_entry:[0,3,1,""],write_stack_slice_and_increment:[0,3,1,""]},"cfelpyutils.cfel_fabio":{read_cbf_from_stream:[0,1,1,""]},"cfelpyutils.cfel_geom":{apply_geometry_from_file:[0,1,1,""],apply_geometry_from_pixel_maps:[0,1,1,""],pixel_maps_for_image_view:[0,1,1,""],pixel_maps_from_geometry_file:[0,1,1,""]},"cfelpyutils.cfel_hdf5":{load_nparray_from_hdf5_file:[0,1,1,""]},"cfelpyutils.cfel_optarg":{parse_parameters:[0,1,1,""]},"cfelpyutils.cfel_psana":{dirname_from_source_runs:[0,1,1,""],psana_event_inspection:[0,1,1,""],psana_obj_from_string:[0,1,1,""]},cfelpyutils:{cfel_crystfel:[0,0,0,"-"],cfel_cxi:[0,0,0,"-"],cfel_fabio:[0,0,0,"-"],cfel_geom:[0,0,0,"-"],cfel_hdf5:[0,0,0,"-"],cfel_optarg:[0,0,0,"-"],cfel_psana:[0,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","method","Python method"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:method"},terms:{"boolean":0,"byte":0,"case":0,"class":0,"default":0,"float":0,"function":0,"import":0,"int":0,"new":0,"return":0,"true":0,For:0,Its:0,THe:0,The:0,Use:0,about:0,access:0,accord:0,across:0,add:0,add_stack_to_writ:0,added:0,adher:0,after:0,again:0,against:0,all:0,allow:0,allowa:0,alreadi:0,also:0,amost:0,ani:0,anoth:0,api:0,appear:0,append:0,append_data_to_stack:0,appli:0,apply_geometry_from_fil:0,apply_geometry_from_pixel_map:0,are_stacks_initi:[],argument:0,arrai:0,assign:0,attempt:0,attribut:0,automat:0,axes:0,backcspad:0,base:0,beam:0,been:0,befor:0,block:0,bool:0,brace:0,bracket:0,buffer:0,build:0,can:0,cannot:0,cbf_obj:0,cbfimag:0,center:0,cfel:0,cfel_crystfel:2,cfel_cxi:2,cfel_fabio:2,cfel_geom:2,cfel_hdf5:2,cfel_optarg:2,cfel_psana:2,cfelfabio:0,cfelgeom:0,cfelhdf5:0,cfeloptarg:0,cfelpsana:0,chang:0,characterist:0,check:0,choic:0,chuck:0,chunk:0,chunk_siz:0,close:0,close_fil:0,command:0,compress:0,comput:0,config:0,configpars:0,configur:0,contain:0,content:[1,2],convers:0,convert:0,coordin:0,corner:0,correct:0,count:0,counter1:0,counter2:0,cours:0,cover:0,creat:0,create_link:0,create_link_to_group:0,crystfel:0,crystfel_geometri:0,cxi:0,cxidb:0,cxiwrit:0,cxix:0,data:0,data_as_slab:0,data_filenam:0,data_group:0,defin:0,delet:0,describ:0,detector1:0,detector2:0,detector:0,detector_1:0,detectorname1:0,detectorname2:0,determin:0,dict:0,dictionari:0,directori:0,dirnam:0,dirname_from_source_run:0,distanc:0,document:0,doubl:0,dtype:0,dure:0,each:0,end:0,ensur:0,entri:0,entry_1:0,error:0,etc:0,event:0,exampl:0,exist:0,exp:0,expand:0,extract:0,fabio:0,fals:0,file:0,file_is_ful:0,filenam:0,first:0,fix:0,fnam:0,follow:0,form:0,format:0,frame:0,from:0,frontcspad:0,full:0,further:0,gener:0,geometri:0,geometry_filenam:0,get:0,get_detector_geometry_2:0,get_file_handl:0,group:0,h5py:0,handl:0,has:0,have:0,hdf5:0,hold:0,html:0,http:0,identifi:0,im_out:0,imag:0,imageview:0,img_shap:0,implement:0,index:1,inform:0,initi:0,initial_data:0,initialize_stack:0,input:0,inspect:0,instanc:0,instanti:0,instead:0,integ:0,interact:0,intern:0,interoper:0,interpret:0,keep:0,kei:0,layout:0,left:0,level:0,like:0,line:0,link:0,list:0,load:0,load_crystfel_geometri:0,load_nparray_from_hdf5_fil:0,locat:0,low:0,make:0,manag:0,mani:0,manual:0,map:0,match:0,max_num_slic:0,maximum:0,miss:0,mod:0,modul:[1,2],monitor_param:0,more:0,multi:0,must:0,nake:0,name:0,ndarrai:0,need:0,never:0,next:0,non:0,none:0,nonetyp:0,normal:0,nparrai:0,number:0,number_of_entri:0,numpi:0,object:0,onc:0,one:0,onli:0,open:0,oper:0,oppos:0,option:0,order:0,org:0,origin:0,otherwis:0,out:0,output:0,overwrit:0,overwritten:0,own:0,p11:0,packag:2,page:1,paramet:0,pars:0,parse_paramet:0,parser:0,path:0,payload:0,petraiii:0,physic:0,pixel:0,pixel_maps_for_image_view:0,pixel_maps_from_geometry_fil:0,point:0,prefix:0,previou:0,print:0,process:0,project:0,provid:0,psana:0,psana_event_inspect:0,psana_obj_from_str:0,pyqtgraph:0,python:0,quot:0,rai:0,rais:0,rand:0,random:0,rang:[],rawconfigpars:0,read:0,read_cbf_from_stream:0,receiv:0,refer:0,reimplement:0,relev:0,replac:0,represent:0,reset:0,respect:0,risk:0,rule:0,same:0,search:1,see:0,sender:0,set:0,sever:0,shape:0,simpl:0,singl:0,size:0,slab:0,slab_shap:0,slice:0,softwar:0,sourc:0,specifi:0,squar:0,stack:0,stacks_are_initi:0,start:0,statu:0,str:0,stream:0,string:0,structur:0,style:0,subdirectori:0,submodul:2,subsequ:0,succe:0,sure:0,sync:0,synchron:0,system:0,take:0,test1:0,test2:0,tfel:0,than:0,thei:0,them:0,thi:0,time:0,top:0,tri:0,tupl:0,turn:0,type:0,uncorrect:0,union:0,unless:0,usag:0,use:0,used:0,user:0,using:0,util:0,valid:0,valu:0,verbatim:0,visual:0,wai:0,want:0,what:0,where:0,which:0,widget:0,without:0,word:0,work:0,write:0,write_simple_entri:0,write_slice_and_incr:0,write_stack_slice_and_incr:0,writer:0,written:0,www:0,your:0},titles:["cfelpyutils package","Welcome to cfelpyutils&#8217;s documentation!","cfelpyutils"],titleterms:{cfel_crystfel:0,cfel_cxi:0,cfel_fabio:0,cfel_geom:0,cfel_hdf5:0,cfel_optarg:0,cfel_psana:0,cfelfabio:[],cfelgeom:[],cfelhdf5:[],cfeloptarg:[],cfelpsana:[],cfelpyutil:[0,1,2],content:0,document:1,indic:1,modul:0,packag:0,submodul:0,tabl:1,welcom:1}})
\ No newline at end of file
+Search.setIndex({docnames:["cfelpyutils","index","modules"],envversion:53,filenames:["cfelpyutils.rst","index.rst","modules.rst"],objects:{"":{cfelpyutils:[0,0,0,"-"]},"cfelpyutils.cfel_crystfel":{load_crystfel_geometry:[0,1,1,""]},"cfelpyutils.cfel_cxi":{CXIWriter:[0,2,1,""]},"cfelpyutils.cfel_cxi.CXIWriter":{add_stack_to_writer:[0,3,1,""],append_data_to_stack:[0,3,1,""],close_file:[0,3,1,""],create_link:[0,3,1,""],create_link_to_group:[0,3,1,""],file_is_full:[0,3,1,""],get_file_handle:[0,3,1,""],initialize_stacks:[0,3,1,""],is_entry_in_file:[0,3,1,""],num_slices_in_file:[0,3,1,""],stacks_are_initialized:[0,3,1,""],write_simple_entry:[0,3,1,""],write_stack_slice_and_increment:[0,3,1,""]},"cfelpyutils.cfel_fabio":{read_cbf_from_stream:[0,1,1,""]},"cfelpyutils.cfel_geom":{ImageShape:[0,2,1,""],PixelMaps:[0,2,1,""],apply_geometry_from_file:[0,1,1,""],apply_geometry_from_pixel_maps:[0,1,1,""],get_image_shape:[0,1,1,""],pixel_maps_for_image_view:[0,1,1,""],pixel_maps_from_geometry_file:[0,1,1,""]},"cfelpyutils.cfel_geom.ImageShape":{fs:[0,4,1,""],ss:[0,4,1,""]},"cfelpyutils.cfel_geom.PixelMaps":{r:[0,4,1,""],x:[0,4,1,""],y:[0,4,1,""]},"cfelpyutils.cfel_hdf5":{load_nparray_from_hdf5_file:[0,1,1,""]},"cfelpyutils.cfel_optarg":{parse_parameters:[0,1,1,""]},"cfelpyutils.cfel_psana":{dirname_from_source_runs:[0,1,1,""],psana_event_inspection:[0,1,1,""],psana_obj_from_string:[0,1,1,""]},cfelpyutils:{cfel_crystfel:[0,0,0,"-"],cfel_cxi:[0,0,0,"-"],cfel_fabio:[0,0,0,"-"],cfel_geom:[0,0,0,"-"],cfel_hdf5:[0,0,0,"-"],cfel_optarg:[0,0,0,"-"],cfel_psana:[0,0,0,"-"]}},objnames:{"0":["py","module","Python module"],"1":["py","function","Python function"],"2":["py","class","Python class"],"3":["py","method","Python method"],"4":["py","attribute","Python attribute"]},objtypes:{"0":"py:module","1":"py:function","2":"py:class","3":"py:method","4":"py:attribute"},terms:{"boolean":0,"byte":0,"case":0,"class":0,"default":0,"float":0,"function":0,"import":0,"int":0,"new":0,"return":0,"true":0,For:0,Its:0,THe:0,The:0,Use:0,about:0,access:0,accord:0,across:0,add:0,add_stack_to_writ:0,added:0,adher:0,after:0,again:0,against:0,alia:0,all:0,allow:0,allowa:0,alreadi:0,also:0,amost:0,ani:0,anoth:0,api:0,appear:0,append:0,append_data_to_stack:0,appli:0,apply_geometry_from_fil:0,apply_geometry_from_pixel_map:0,argument:0,arrai:0,assign:0,attempt:0,attribut:0,automat:0,axes:0,backcspad:0,base:0,beam:0,been:0,befor:0,block:0,bool:0,brace:0,bracket:0,buffer:0,build:0,can:0,cannot:0,cbf_obj:0,cbfimag:0,center:0,cfel:0,cfel_crystfel:2,cfel_cxi:2,cfel_fabio:2,cfel_geom:2,cfel_hdf5:2,cfel_optarg:2,cfel_psana:2,cfelfabio:0,cfelgeom:0,cfelhdf5:0,cfeloptarg:0,cfelpsana:0,chang:0,characterist:0,check:0,choic:0,chuck:0,chunk:0,chunk_siz:0,close:0,close_fil:0,command:0,compress:0,comput:0,config:0,configpars:0,configur:0,contain:0,content:[1,2],convers:0,convert:0,coordin:0,corner:0,correct:0,count:0,counter1:0,counter2:0,cours:0,cover:0,creat:0,create_link:0,create_link_to_group:0,crystfel:0,crystfel_geometri:0,cxi:0,cxidb:0,cxiwrit:0,cxix:0,data:0,data_as_slab:0,data_filenam:0,data_group:0,dataset:0,defin:0,delet:0,describ:0,detector1:0,detector2:0,detector:0,detector_1:0,detectorname1:0,detectorname2:0,determin:0,dict:0,dictionari:0,directori:0,dirnam:0,dirname_from_source_run:0,distanc:0,document:0,doubl:0,dtype:0,dure:0,each:0,either:0,end:0,ensur:0,entri:0,entry_1:0,error:0,etc:0,event:0,exampl:0,exist:0,exp:0,expand:0,extract:0,fabio:0,fals:0,field:0,file:0,file_is_ful:0,filenam:0,first:0,fix:0,fnam:0,follow:0,form:0,format:0,found:0,frame:0,from:0,frontcspad:0,full:0,further:0,gener:0,geometri:0,geometry_filenam:0,get:0,get_detector_geometry_2:0,get_file_handl:0,get_image_shap:0,group:0,h5py:0,handl:0,has:0,have:0,hdf5:0,hit:0,hold:0,html:0,http:0,identifi:0,im_out:0,imag:0,imageshap:0,imageview:0,img_shap:0,implement:0,index:1,inform:0,initi:0,initial_data:0,initialize_stack:0,input:0,inspect:0,instanc:0,instanti:0,instead:0,integ:0,interact:0,intern:0,interoper:0,interpret:0,is_entry_in_fil:0,keep:0,kei:0,layout:0,left:0,level:0,like:0,line:0,link:0,list:0,load:0,load_crystfel_geometri:0,load_nparray_from_hdf5_fil:0,locat:0,low:0,make:0,manag:0,mani:0,manual:0,map:0,match:0,max_num_slic:0,maximum:0,minimum:0,miss:0,mod:0,modul:[1,2],monitor_param:0,more:0,multi:0,must:0,nake:0,name:0,ndarrai:0,need:0,never:0,next:0,non:0,none:0,nonetyp:0,normal:0,nparrai:0,num_slic:0,num_slices_in_fil:0,number:0,number_of_entri:0,numpi:0,object:0,onc:0,one:0,onli:0,open:0,oper:0,oppos:0,option:0,order:0,org:0,origin:0,otherwis:0,out:0,output:0,overwrit:0,overwritten:0,own:0,p11:0,packag:2,page:1,paramet:0,pars:0,parse_paramet:0,parser:0,path:0,payload:0,petraiii:0,physic:0,pixel:0,pixel_maps_for_image_view:0,pixel_maps_from_geometry_fil:0,pixelmap:0,point:0,prefix:0,present:0,previou:0,print:0,process:0,project:0,provid:0,psana:0,psana_event_inspect:0,psana_obj_from_str:0,pyqtgraph:0,python:0,quot:0,rai:0,rais:0,rand:0,random:0,rawconfigpars:0,read:0,read_cbf_from_stream:0,receiv:0,refer:0,reimplement:0,relev:0,replac:0,repres:0,represent:0,reset:0,respect:0,result:0,ret:0,risk:0,rule:0,same:0,search:1,see:0,sender:0,set:0,sever:0,shape:0,simpl:0,singl:0,size:0,slab:0,slice:0,softwar:0,sourc:0,specifi:0,squar:0,stack:0,stacks_are_initi:0,start:0,statu:0,str:0,stream:0,string:0,structur:0,style:0,subdirectori:0,submodul:2,subsequ:0,succe:0,sure:0,sync:0,synchron:0,system:0,take:0,test1:0,test2:0,tfel:0,than:0,thei:0,them:0,thi:0,time:0,top:0,tri:0,tupl:0,turn:0,type:0,union:0,unless:0,usag:0,use:0,used:0,user:0,using:0,util:0,valid:0,valu:0,verbatim:0,visual:0,wai:0,want:0,what:0,where:0,which:0,widget:0,without:0,word:0,work:0,write:0,write_simple_entri:0,write_slice_and_incr:0,write_stack_slice_and_incr:0,writer:0,written:0,writter:0,www:0,your:0},titles:["cfelpyutils package","Welcome to cfelpyutils\u2019s documentation!","cfelpyutils"],titleterms:{cfel_crystfel:0,cfel_cxi:0,cfel_fabio:0,cfel_geom:0,cfel_hdf5:0,cfel_optarg:0,cfel_psana:0,cfelpyutil:[0,1,2],content:0,document:1,indic:1,modul:0,packag:0,submodul:0,tabl:1,welcom:1}})
\ No newline at end of file
-- 
GitLab