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

Source code for dxtbx.serialize.dump

from __future__ import absolute_import, division

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


[docs]def compact_simple_list(match): """Callback function. Given a simple list match, compact it and ensure that it wraps around by 80 characters. Params: match The regular expression match Returns: The string to replace the expression with """ import textwrap # Calculate the initial indent as the length of the first match group initial_indent = len(match.group(1)) # Get the lines in the match lines = match.group(2).splitlines() # Set the indent by finding the indent of the first lines if len(lines) > 1: subsequent_indent = len(lines[1]) - len(lines[1].lstrip()) else: subsequent_indent = 0 # Strip whitespace from the lines lines = [l.strip() for l in lines] # Create and return the string wrapped about 80 chars list_string = "\n".join( textwrap.wrap( " ".join(lines), 80, initial_indent=" " * initial_indent, subsequent_indent=" " * subsequent_indent, ) ).lstrip() # Return the string return match.group(1) + list_string
[docs]def compact_simple_lists(string): """Find simple lists in the string and compact. Params: string The input JSON string Returns: The output JSON string """ import re return re.sub(r'(.*"\w+".*:.*)(\[[^\{\}\[\]]*\])', compact_simple_list, string)
[docs]def imageset_to_string(obj, compact=False): """Dump the given object to string. Params: obj The imageset compact Write in compact representation Returns: The JSON string """ import json import textwrap from dxtbx.serialize.imageset import imageset_to_dict # Return as a JSON string if compact == False: string = json.dumps(imageset_to_dict(obj), indent=2, ensure_ascii=True) # Hack to make more readable # string = compact_simple_lists(string) else: string = json.dumps( imageset_to_dict(obj), separators=(",", ":"), ensure_ascii=True ) # Return the string return string
[docs]def imageset(obj, outfile, compact=False): """Dump the given object to file. Params: obj The imageset to dump outfile The output file name or file object compact Write in compact representation """ # If the input is a string then open and write to that file if isinstance(outfile, str): with open(outfile, "w") as outfile: outfile.write(imageset_to_string(obj, compact)) # Otherwise assume the input is a file and write to it else: outfile.write(imageset_to_string(obj, compact))
[docs]def datablock(obj, outfile, **kwargs): """ Dump the given object to file. """ from dxtbx.datablock import DataBlockDumper dump = DataBlockDumper(obj) dump.as_file(outfile, **kwargs)
[docs]def crystal(obj, outfile, compact=False): """Dump the given object to file. Params: obj The crystal to dump outfile The output file name or file object compact Write in compact representation """ from dxtbx.serialize.crystal import to_string # If the input is a string then open and write to that file if isinstance(outfile, str): with open(outfile, "w") as outfile: outfile.write(to_string(obj, compact)) # Otherwise assume the input is a file and write to it else: outfile.write(to_string(obj, compact))
[docs]def experiment_list(obj, outfile): """ Dump an experiment list. """ from dxtbx.model.experiment_list import ExperimentListDumper dumper = ExperimentListDumper(obj) dumper.as_file(outfile)