Source code for cil.framework.vector_data

#  Copyright 2018 United Kingdom Research and Innovation
#  Copyright 2018 The University of Manchester
#
#  Licensed under the Apache License, Version 2.0 (the "License");
#  you may not use this file except in compliance with the License.
#  You may obtain a copy of the License at
#
#      http://www.apache.org/licenses/LICENSE-2.0
#
#  Unless required by applicable law or agreed to in writing, software
#  distributed under the License is distributed on an "AS IS" BASIS,
#  WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
#  See the License for the specific language governing permissions and
#  limitations under the License.
#
# Authors:
# CIL Developers, listed at: https://github.com/TomographicImaging/CIL/blob/master/NOTICE.txt
import numpy

from .data_container import DataContainer


[docs] class VectorData(DataContainer): '''DataContainer to contain 1D array''' @property def geometry(self): return self._geometry @geometry.setter def geometry(self, val): self._geometry = val @property def dimension_labels(self): if hasattr(self, 'geometry'): return self.geometry.dimension_labels return self._dimension_labels @dimension_labels.setter def dimension_labels(self, val): if hasattr(self,'geometry'): self.geometry.dimension_labels = val self._dimension_labels = val def __init__(self, array=None, **kwargs): self.geometry = kwargs.get('geometry', None) dtype = kwargs.get('dtype', numpy.float32) if self.geometry is None: if array is None: raise ValueError('Please specify either a geometry or an array') else: from .vector_geometry import VectorGeometry if len(array.shape) > 1: raise ValueError('Incompatible size: expected 1D got {}'.format(array.shape)) out = array self.geometry = VectorGeometry(array.shape[0], **kwargs) self.length = self.geometry.length else: self.length = self.geometry.length if array is None: out = numpy.zeros((self.length,), dtype=dtype) else: if self.length == array.shape[0]: out = array else: raise ValueError('Incompatible size: expecting {} got {}'.format((self.length,), array.shape)) deep_copy = True # need to pass the geometry, othewise None super(VectorData, self).__init__(out, deep_copy, self.geometry.dimension_labels, geometry = self.geometry)