Source code for PyMca5.PyMcaCore.DataObject

#/*##########################################################################
#
# The PyMca X-Ray Fluorescence Toolkit
#
# Copyright (c) 2004-2014 European Synchrotron Radiation Facility
#
# This file is part of the PyMca X-ray Fluorescence Toolkit developed at
# the ESRF by the Software group.
#
# Permission is hereby granted, free of charge, to any person obtaining a copy
# of this software and associated documentation files (the "Software"), to deal
# in the Software without restriction, including without limitation the rights
# to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
# copies of the Software, and to permit persons to whom the Software is
# furnished to do so, subject to the following conditions:
#
# The above copyright notice and this permission notice shall be included in
# all copies or substantial portions of the Software.
#
# THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
# IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
# FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
# AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
# LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
# OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN
# THE SOFTWARE.
#
#############################################################################*/
__author__ = "V. Armando Sole - ESRF Data Analysis"
__contact__ = "sole@esrf.fr"
__license__ = "MIT"
__copyright__ = "European Synchrotron Radiation Facility, Grenoble, France"
import numpy

[docs]class DataObject(object): ''' Simple container of an array and associated information. Basically it has the members: info: A dictionnary data: An array, usually 2D, 3D, ... In the past also incorporated selection methods. Now each different data source implements its selection methods. Plotting routines may add additional members x: A list containing arrays to be considered axes y: A list of data to be considered as signals m: A list containing the monitor data ''' GETINFO_DEPRECATION_WARNING = True GETDATA_DEPRECATION_WARNING = True SELECT_DEPRECATION_WARNING = True def __init__(self): ''' Defaut Constructor ''' self.info = {} self.data = numpy.array([]) # all the following methods are here for compatibility purposes # they are obsolete and bound to disappear.
[docs] def getInfo(self): """ Deprecated method """ if DataObject.GETINFO_DEPRECATION_WARNING: print("DEPRECATION WARNING: DataObject.getInfo()") DataObject.GETINFO_DEPRECATION_WARNING = False return self.info
[docs] def getData(self): """ Deprecated method """ if DataObject.GETDATA_DEPRECATION_WARNING: print("DEPRECATION WARNING: DataObject.getData()") DataObject.GETDATA_DEPRECATION_WARNING = False return self.data
[docs] def select(self, selection=None): """ Deprecated method """ if DataObject.SELECT_DEPRECATION_WARNING: print("DEPRECATION WARNING: DataObject.select(selection=None)") DataObject.SELECT_DEPRECATION_WARNING = False dataObject = DataObject() dataObject.info = self.info dataObject.info['selection'] = selection if selection is None: dataObject.data = self.data return dataObject if type(selection) == dict: #dataObject.data = self.data #should I set it to none??? dataObject.data = None if 'rows' in selection: dataObject.x = None dataObject.y = None dataObject.m = None if 'x' in selection['rows']: for rownumber in selection['rows']['x']: if rownumber is None: continue if dataObject.x is None: dataObject.x = [] dataObject.x.append(self.data[rownumber, :]) if 'y' in selection['rows']: for rownumber in selection['rows']['y']: if rownumber is None: continue if dataObject.y is None: dataObject.y = [] dataObject.y.append(self.data[rownumber, :]) if 'm' in selection['rows']: for rownumber in selection['rows']['m']: if rownumber is None: continue if dataObject.m is None: dataObject.m = [] dataObject.m.append(self.data[rownumber, :]) elif ('cols' in selection) or ('columns' in selection): if 'cols' in selection: key = 'cols' else: key = 'columns' dataObject.x = None dataObject.y = None dataObject.m = None if 'x' in selection[key]: for rownumber in selection[key]['x']: if rownumber is None: continue if dataObject.x is None: dataObject.x = [] dataObject.x.append(self.data[:, rownumber]) if 'y' in selection[key]: for rownumber in selection[key]['y']: if rownumber is None: continue if dataObject.y is None: dataObject.y = [] dataObject.y.append(self.data[:, rownumber]) if 'm' in selection[key]: for rownumber in selection[key]['m']: if rownumber is None: continue if dataObject.m is None: dataObject.m = [] dataObject.m.append(self.data[:, rownumber]) if dataObject.x is None: if 'Channel0' in dataObject.info: ch0 = int(dataObject.info['Channel0']) else: ch0 = 0 dataObject.x = [numpy.arange(ch0, ch0 + len(dataObject.y[0])).astype(numpy.float)] if not ("selectiontype" in dataObject.info): dataObject.info["selectiontype"] = "%dD" % len(dataObject.y) return dataObject