diff --git a/src/PyMca5/PyMcaCore/NexusDataSource.py b/src/PyMca5/PyMcaCore/NexusDataSource.py index 309f9f144..61796ac7b 100644 --- a/src/PyMca5/PyMcaCore/NexusDataSource.py +++ b/src/PyMca5/PyMcaCore/NexusDataSource.py @@ -608,12 +608,21 @@ def getDataObject(self, key, selection=None): output.x.append(data) elif cnt == 'm': # support multiple monitors - output.m = [data] + if numpy.ndim(data) == 0: + data_array = numpy.array([data]) + else: + data_array = numpy.array(data) + + output.m = [data_array] if len(selection[cnt]) > 1: for midx in range(1, len(selection[cnt])): mpath = entry + selection['cntlist'][selection[cnt][midx]] mdata = phynxFile[mpath][()] - output.m.append(mdata) + if numpy.ndim(mdata) == 0: + mdata_array = numpy.array([mdata]) + else: + mdata_array = numpy.array(mdata) + output.m.append(mdata_array) # SCAN specific to handle asynchronous writing if output.info['selectiontype'] in ["1D"]: @@ -627,8 +636,9 @@ def getDataObject(self, key, selection=None): if output.m: for mi in range(len(output.m)): mlength = output.m[mi].size - delta = max(delta, abs(ylength - mlength)) - length = min(length, mlength) + if mlength != 1: + delta = max(delta, abs(ylength - mlength)) + length = min(length, mlength) if delta > 1: _logger.warning("Stripping last %d points" % delta) elif delta == 1: diff --git a/src/PyMca5/PyMcaGui/pymca/ScanWindow.py b/src/PyMca5/PyMcaGui/pymca/ScanWindow.py index 564dd9029..487dfecd0 100644 --- a/src/PyMca5/PyMcaGui/pymca/ScanWindow.py +++ b/src/PyMca5/PyMcaGui/pymca/ScanWindow.py @@ -318,6 +318,12 @@ def _addSelection(self, selectionlist, replot=True): mdata = numpy.take(dataObject.m[0], index) #A priori the graph only knows about plots ydata = ydata/mdata + elif len(dataObject.m[0]) == 1: + mvalue = dataObject.m[0][0] + if mvalue == 0: + raise ValueError("Do not divide by zero") + mdata = numpy.array([mvalue]) + ydata = ydata / mdata else: raise ValueError("Monitor data length different than counter data") else: @@ -374,7 +380,7 @@ def _addSelection(self, selectionlist, replot=True): numpy.array([dataObject.m[imon]]) if dataObject.m is None: mdata = numpy.ones(len(ydata)).astype(numpy.float64) - elif len(dataObject.m[0]) > 0: + elif all(len(m) > 0 for m in dataObject.m): # Combine all monitors: divide by each one combinedMdata = numpy.ones(len(ydata)).astype(numpy.float64) for imon in range(len(dataObject.m)): @@ -1486,12 +1492,8 @@ def getSvgRenderer(self, printer=None): if printer is None: # printer was not selected # return a renderer without adjusting the viewbox - if sys.version < '3.0': - import cStringIO as StringIO - imgData = StringIO.StringIO() - else: - from io import StringIO - imgData = StringIO() + from io import StringIO + imgData = StringIO() self.saveGraph(imgData, fileFormat='svg') imgData.flush() imgData.seek(0)