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)