#/*##########################################################################
# Copyright (C) 2004-2014 T. Rueter, 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__ = "Tonn Rueter"
__contact__ = "sole@esrf.fr"
__license__ = "MIT"
__copyright__ = "European Synchrotron Radiation Facility, Grenoble, France"
try:
from PyMca5 import Plugin1DBase
except ImportError:
from . import Plugin1DBase
try:
from PyMca5.PyMcaPlugins import MotorInfoWindow
except ImportError:
try:
# Frozen version
from PyMcaPlugins import MotorInfoWindow
except:
print("MotorInfoPlugin importing from somewhere else")
import MotorInfoWindow
DEBUG = 0
[docs]class MotorInfo(Plugin1DBase.Plugin1DBase):
def __init__(self, plotWindow, **kw):
Plugin1DBase.Plugin1DBase.__init__(self, plotWindow, **kw)
self.methodDict = {}
text = 'Show values of various motors.'
function = self.showMotorInfo
icon = None
info = text
self.methodDict["Show Motor Info"] =[function, info, icon]
self.widget = None
[docs] def getMethods(self, plottype=None):
names = list(self.methodDict.keys())
names.sort()
return names
[docs] def getMethodPixmap(self, name):
return self.methodDict[name][2]
[docs] def applyMethod(self, name):
self.methodDict[name][0]()
return
[docs] def showMotorInfo(self):
legendList, motorValuesList = self._getLists()
if self.widget is None:
self._createWidget(legendList, motorValuesList)
else:
self.widget.table.updateTable(legendList, motorValuesList)
self.widget.show()
self.widget.raise_()
def _getLists(self):
curves = self.getAllCurves()
nCurves = len(curves)
if DEBUG:
print ("Received %d curve(s).." % nCurves)
legendList = [leg for (xvals, yvals, leg, info) in curves]
infoList = [info for (xvals, yvals, leg, info) in curves]
motorValuesList = self._convertInfoDictionary( infoList )
return legendList, motorValuesList
def _convertInfoDictionary(self, infosList):
ret = []
for info in infosList :
motorNames = info.get('MotorNames', None)
if motorNames is not None:
if type(motorNames) == str:
namesList = motorNames.split()
elif type(motorNames) == list:
namesList = motorNames
else:
namesList = []
else:
namesList = []
motorValues = info.get('MotorValues', None)
if motorNames is not None:
if type(motorValues) == str:
valuesList = motorValues.split()
elif type(motorValues) == list:
valuesList = motorValues
else:
valuesList = []
else:
valuesList = []
if len(namesList) == len(valuesList):
ret.append( dict( zip( namesList, valuesList ) ) )
else:
print("Number of motors and values does not match!")
return ret
def _createWidget(self, legendList, motorValuesList):
parent = None
self.widget = MotorInfoWindow.MotorInfoDialog(parent,
legendList,
motorValuesList)
self.widget.buttonUpdate.clicked.connect(self.showMotorInfo)
self.widget.updateShortCut.activated.connect(self.showMotorInfo)
MENU_TEXT = "Motor Info"
[docs]def getPlugin1DInstance(plotWindow, **kw):
ob = MotorInfo(plotWindow)
return ob
if __name__ == "__main__":
# Basic test setup
import numpy
from PyMca5.PyMcaGraph import Plot
from PyMca5.PyMcaGui import PyMcaQt as qt
app = qt.QApplication([])
x = numpy.arange(100.)
y = numpy.arange(100.)
plot = Plot.Plot()
plot.addCurve(x, y, "Curve1", {'MotorNames': "foo bar", 'MotorValues': "3.14 2.97"})
plot.addCurve(x+100, y, "Curve2", {'MotorNames': "baz", 'MotorValues': "6.28"})
plugin = getPlugin1DInstance(plot)
plugin.applyMethod(plugin.getMethods()[0])
app.exec_()