Exemplo n.º 1
0
        class image_data_cache(object):
            def __init__(self, imageset, size=10):
                self.imageset = imageset
                self.size = size
                self._image_data = OrderedDict()

            def __getitem__(self, i):
                image_data = self._image_data.get(i)
                if image_data is None:
                    image_data = self.imageset.get_raw_data(i)
                    if len(self._image_data) >= self.size:
                        # remove the oldest entry in the cache
                        del self._image_data[self._image_data.keys()[0]]
                    self._image_data[i] = image_data
                return image_data
Exemplo n.º 2
0
    class image_data_cache(object):
      def __init__(self, imageset, size=10):
        self.imageset = imageset
        self.size = size
        self._image_data = OrderedDict()

      def __getitem__(self, i):
        image_data = self._image_data.get(i)
        if image_data is None:
          image_data = self.imageset.get_raw_data(i)
          if len(self._image_data) >= self.size:
            # remove the oldest entry in the cache
            del self._image_data[self._image_data.keys()[0]]
          self._image_data[i] = image_data
        return image_data
Exemplo n.º 3
0
class cif(DictMixin):
    def __init__(self, blocks=None):
        if blocks is not None:
            self.blocks = OrderedDict(blocks)
        else:
            self.blocks = OrderedDict()
        self.keys_lower = dict([(key.lower(), key)
                                for key in self.blocks.keys()])

    def __setitem__(self, key, value):
        assert isinstance(value, block)
        if not re.match(tag_re, '_' + key):
            raise Sorry("%s is not a valid data block name" % key)
        self.blocks[key] = value
        self.keys_lower[key.lower()] = key

    def get(self, key, default=None):
        key_lower = self.keys_lower.get(key.lower())
        if (key_lower is None):
            return default
        return self.blocks.get(key_lower, default)

    def __getitem__(self, key):
        result = self.get(key)
        if (result is None):
            raise KeyError('Unknown CIF data block name: "%s"' % key)
        return result

    def __delitem__(self, key):
        del self.blocks[self.keys_lower[key.lower()]]
        del self.keys_lower[key.lower()]

    def keys(self):
        return self.blocks.keys()

    def __repr__(self):
        return repr(OrderedDict(self.iteritems()))

    def __copy__(self):
        return cif(self.blocks.copy())

    copy = __copy__

    def __deepcopy__(self, memo):
        return cif(copy.deepcopy(self.blocks, memo))

    def deepcopy(self):
        return copy.deepcopy(self)

    def show(self,
             out=None,
             indent="  ",
             indent_row=None,
             data_name_field_width=34,
             loop_format_strings=None,
             align_columns=True):
        if out is None:
            out = sys.stdout
        for name, block in self.items():
            print >> out, "data_%s" % name
            block.show(out=out,
                       indent=indent,
                       indent_row=indent_row,
                       data_name_field_width=data_name_field_width,
                       loop_format_strings=loop_format_strings,
                       align_columns=align_columns)

    def __str__(self):
        s = StringIO()
        self.show(out=s)
        return s.getvalue()

    def validate(self,
                 dictionary,
                 show_warnings=True,
                 error_handler=None,
                 out=None):
        if out is None: out = sys.stdout
        from iotbx.cif import validation
        errors = {}
        if error_handler is None:
            error_handler = validation.ErrorHandler()
        for key, block in self.blocks.iteritems():
            error_handler = error_handler.__class__()
            dictionary.set_error_handler(error_handler)
            block.validate(dictionary)
            errors.setdefault(key, error_handler)
            if error_handler.error_count or error_handler.warning_count:
                error_handler.show(show_warnings=show_warnings, out=out)
        return error_handler

    def sort(self, recursive=False, key=None, reverse=False):
        self.blocks = OrderedDict(
            sorted(self.blocks.items(), key=key, reverse=reverse))
        if recursive:
            for b in self.blocks.values():
                b.sort(recursive=recursive, reverse=reverse)
Exemplo n.º 4
0
class cif(DictMixin):
  def __init__(self, blocks=None):
    if blocks is not None:
      self.blocks = OrderedDict(blocks)
    else:
      self.blocks = OrderedDict()
    self.keys_lower = dict([(key.lower(), key) for key in self.blocks.keys()])

  def __setitem__(self, key, value):
    assert isinstance(value, block)
    if not re.match(tag_re, '_'+key):
      raise Sorry("%s is not a valid data block name" %key)
    self.blocks[key] = value
    self.keys_lower[key.lower()] = key

  def get(self, key, default=None):
    key_lower = self.keys_lower.get(key.lower())
    if (key_lower is None):
      return default
    return self.blocks.get(key_lower, default)

  def __getitem__(self, key):
    result = self.get(key)
    if (result is None):
      raise KeyError('Unknown CIF data block name: "%s"' % key)
    return result

  def __delitem__(self, key):
    del self.blocks[self.keys_lower[key.lower()]]
    del self.keys_lower[key.lower()]

  def keys(self):
    return self.blocks.keys()

  def __repr__(self):
    return repr(OrderedDict(self.iteritems()))

  def __copy__(self):
    return cif(self.blocks.copy())

  copy = __copy__

  def __deepcopy__(self, memo):
    return cif(copy.deepcopy(self.blocks, memo))

  def deepcopy(self):
    return copy.deepcopy(self)

  def show(self, out=None, indent="  ", indent_row=None,
           data_name_field_width=34,
           loop_format_strings=None):
    if out is None:
      out = sys.stdout
    for name, block in self.items():
      print >> out, "data_%s" %name
      block.show(
        out=out, indent=indent, indent_row=indent_row,
        data_name_field_width=data_name_field_width,
        loop_format_strings=loop_format_strings)

  def __str__(self):
    s = StringIO()
    self.show(out=s)
    return s.getvalue()

  def validate(self, dictionary, show_warnings=True, error_handler=None, out=None):
    if out is None: out = sys.stdout
    from iotbx.cif import validation
    errors = {}
    if error_handler is None:
      error_handler = validation.ErrorHandler()
    for key, block in self.blocks.iteritems():
      error_handler = error_handler.__class__()
      dictionary.set_error_handler(error_handler)
      block.validate(dictionary)
      errors.setdefault(key, error_handler)
      if error_handler.error_count or error_handler.warning_count:
        error_handler.show(show_warnings=show_warnings, out=out)
    return error_handler

  def sort(self, recursive=False, key=None, reverse=False):
    self.blocks = OrderedDict(sorted(self.blocks.items(), key=key, reverse=reverse))
    if recursive:
      for b in self.blocks.values():
        b.sort(recursive=recursive, reverse=reverse)