Commit db1cf2c1 authored by payno's avatar payno

Merge branch 'add_com' into 'master'

[operation] First draw of the COM

See merge request !7
parents 8efc4f8d 40882dc8
......@@ -63,6 +63,10 @@ class _BaseOperation(qt.QObject):
data.setflags(write=self._can_overwrite_data)
return data
@property
def experiment(self):
return self._experiment
def compute(self):
raise NotImplementedError('Base class')
......
......@@ -27,3 +27,52 @@
__authors__ = ["H. Payno"]
__license__ = "MIT"
__date__ = "15/10/2018"
from . import AdditiveOperation
from .mapping import _MappingBase
from collections import namedtuple
import numpy
import logging
_logger = logging.getLogger(__file__)
_MapsCom = namedtuple('_MapCom', ['map1', 'map2'])
class COM(AdditiveOperation):
"""
Base class used for mapping
"""
_NAME = 'com calculation'
def __init__(self, map):
assert isinstance(map, _MappingBase)
AdditiveOperation.__init__(self, experiment=map.experiment,
name=COM._NAME)
self._map = map
self.__maps = []
def key(self):
return COM._NAME
def compute(self):
assert self._map.ndim is 1
self.__maps = []
for dim in self._map.dim:
_map1 = dim[:, :, 0]
_map1 = _map1 - numpy.nan_to_num(_map1.mean())
_map2 = dim[:, :, 1]
_map2 = _map2 - numpy.nan_to_num(_map2.mean())
self.__maps.append(_MapsCom(map1=_map1, map2=_map2))
@property
def maps(self):
return self.__maps
@property
def ndim(self):
return len(self.__maps)
# coding: utf-8
# /*##########################################################################
#
# Copyright (c) 2016-2017 European Synchrotron Radiation Facility
#
# 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.
#
# ###########################################################################*/
__authors__ = ["H. Payno"]
__license__ = "MIT"
__date__ = "04/10/2018"
from silx.gui import qt
from silx.gui.plot import Plot2D
from collections import OrderedDict
from id06workflow.core.experiment.operation.com import COM as COMOperation
class ComWidget(qt.QWidget):
"""
Widget to display result of the COM operation
"""
def __init__(self, parent=None, comOperation=None):
qt.QWidget.__init__(self, parent)
self.setLayout(qt.QVBoxLayout())
self._control = _ComControlWidget(parent=self)
self.layout().addWidget(self._control)
self._plot = Plot2D(parent=self)
self.layout().addWidget(self._plot)
# connect signal
self._control.sigSelectionChanged.connect(self._update)
if comOperation is not None:
self.setOperation(comOperation)
def setOperation(self, operation):
assert isinstance(operation, (COMOperation, type(None)))
self._operation = operation
self._control.setOperation(operation)
def _update(self):
self._plot.clear()
dim = self._control.getDim()
_iMap = self._control.getMapType()
if dim >= 0:
# TODO: maps[dim] should be also a list with key values: 'value',
# 'mean', 'gradients' ...
_map = self._operation.maps[dim][_iMap]
self._plot.addImage(_map)
class _ComControlWidget(qt.QWidget):
_COM_VALUE = 'com value'
_COM_VARIANCE = 'com mean variance'
_COM_GRADIENTS = 'com gradients'
_MAP_TYPES = OrderedDict([
(_COM_VALUE, 0),
(_COM_VARIANCE, 1),
(_COM_GRADIENTS, 2)
])
sigSelectionChanged = qt.Signal()
"""Signal emitted when the selection of the com change"""
def __init__(self, parent=None):
qt.QWidget.__init__(self, parent)
self.setLayout(qt.QHBoxLayout())
self.layout().addWidget(qt.QLabel('dim:', parent=self))
self._dim = qt.QComboBox(parent=self)
self.layout().addWidget(self._dim)
self.layout().addWidget(qt.QLabel('map type:', parent=self))
self._map = qt.QComboBox(parent=self)
self.layout().addWidget(self._map)
# TODO: are those name correct ?
for map_type in (_ComControlWidget._MAP_TYPES):
self._map.addItem(map_type)
index = self._map.findText(_ComControlWidget._COM_VALUE)
assert index >= 0
self._map.setCurrentIndex(index)
# connect signals
self._map.currentIndexChanged.connect(self.__selectionChanged)
self._dim.currentIndexChanged.connect(self.__selectionChanged)
def setOperation(self, operation):
assert isinstance(operation, (COMOperation, type(None)))
self._dim.clear()
if operation is not None:
for dim in range(operation.ndim):
self._dim.addItem(str(dim))
self._map.setEnabled(operation is not None and operation.ndim > 0)
def getDim(self):
currentDim = self._dim.currentText()
if currentDim == '':
return -1
else:
return int(currentDim)
def getMapType(self):
currentMapType = self._map.currentText()
assert currentMapType in _ComControlWidget._MAP_TYPES
return _ComControlWidget._MAP_TYPES[currentMapType]
def __selectionChanged(self, *args, **kwargs):
self.sigSelectionChanged.emit()
# coding: utf-8
# /*##########################################################################
#
# Copyright (c) 2016-2017 European Synchrotron Radiation Facility
#
# 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.
#
# ###########################################################################*/
__authors__ = ["H. Payno"]
__license__ = "MIT"
__date__ = "18/10/2018"
from Orange.widgets import gui
from Orange.widgets.widget import OWWidget
from Orange.canvas.registry.description import OutputSignal, InputSignal
from id06workflow.core.experiment import Experiment
from id06workflow.core.experiment.operation.mapping import _MappingBase
from id06workflow.core.experiment.operation.com import COM as COMOperation
from id06workflow.gui.com import ComWidget
import logging
_logger = logging.getLogger(__file__)
class ComOW(OWWidget):
"""
Compute Com for the received mapping and update
"""
name = "COM"
id = "orange.widgets.id06workflow.com"
description = "Compute center of mass of the data"
icon = "icons/com.svg"
priority = 16
category = "esrfWidgets"
keywords = ["dataset", "data", "com", "center", "of", "mass"]
inputs = [InputSignal(name="map", handler='_process', type=_MappingBase)]
outputs = [OutputSignal(name="map", type=_MappingBase),
OutputSignal(name="data", type=Experiment)]
want_main_area = True
resizing_enabled = True
compress_signal = False
def __init__(self):
# TODO: add drag and drop stuff on it
super().__init__()
layout = gui.vBox(self.mainArea, 'data reduction').layout()
self._widget = ComWidget(parent=self)
layout.addWidget(self._widget)
def _process(self, _map):
if _map is None:
return
assert isinstance(_map, _MappingBase)
operation = COMOperation(map=_map)
operation.compute()
self._widget.setOperation(operation)
self.send("data", operation.experiment)
self.send("map", operation)
......@@ -33,7 +33,7 @@ from Orange.widgets.widget import OWWidget
from Orange.canvas.registry.description import InputSignal, OutputSignal
from id06workflow.gui.mapping import MappingPlot
from id06workflow.core.experiment import Experiment
from id06workflow.core.experiment.operation.mapping import GradientRemoval
from id06workflow.core.experiment.operation.mapping import GradientRemoval, _MappingBase
from id06workflow.core.types import _Image
......@@ -51,9 +51,11 @@ class GradientRemovalOW(OWWidget):
category = "esrfWidgets"
keywords = ["dataset", "gradient", "removal"]
# TODO: as for com calculation the input should be a _Mapping base to
inputs = [InputSignal(name="data", type=Experiment, handler='_process')]
outputs = [OutputSignal(name="data", type=Experiment),
OutputSignal(name="image", type=_Image)]
OutputSignal(name="image", type=_Image),
OutputSignal(name='map', type=_MappingBase)]
want_main_area = True
resizing_enabled = True
......@@ -70,6 +72,9 @@ class GradientRemovalOW(OWWidget):
if experiment is None:
return
# TODO: as for com calculation the input should be a _Mapping base to
# assert isinstance(mapping, _MappingBase)
operation = GradientRemoval(experiment=experiment)
operation.compute()
self.send("image",
......@@ -77,5 +82,6 @@ class GradientRemovalOW(OWWidget):
self._plot.setOperation(operation)
self.send("data", experiment)
self.send("map", operation)
OWWidget.accept(self)
<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!-- Created with Inkscape (http://www.inkscape.org/) -->
<svg
xmlns:dc="http://purl.org/dc/elements/1.1/"
xmlns:cc="http://creativecommons.org/ns#"
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
xmlns:svg="http://www.w3.org/2000/svg"
xmlns="http://www.w3.org/2000/svg"
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
width="48px"
height="48px"
id="svg2985"
version="1.1"
inkscape:version="0.48.5 r10040"
sodipodi:docname="New document 2">
<defs
id="defs2987" />
<sodipodi:namedview
id="base"
pagecolor="#ffffff"
bordercolor="#666666"
borderopacity="1.0"
inkscape:pageopacity="0.0"
inkscape:pageshadow="2"
inkscape:zoom="7"
inkscape:cx="24"
inkscape:cy="24"
inkscape:current-layer="layer1"
showgrid="true"
inkscape:grid-bbox="true"
inkscape:document-units="px"
inkscape:window-width="824"
inkscape:window-height="707"
inkscape:window-x="722"
inkscape:window-y="381"
inkscape:window-maximized="0" />
<metadata
id="metadata2990">
<rdf:RDF>
<cc:Work
rdf:about="">
<dc:format>image/svg+xml</dc:format>
<dc:type
rdf:resource="http://purl.org/dc/dcmitype/StillImage" />
<dc:title></dc:title>
</cc:Work>
</rdf:RDF>
</metadata>
<g
id="layer1"
inkscape:label="Layer 1"
inkscape:groupmode="layer">
<g
transform="scale(0.77226322,1.2948953)"
style="font-size:26.6216526px;font-style:normal;font-variant:normal;font-weight:normal;font-stretch:normal;line-height:125%;letter-spacing:0px;word-spacing:0px;fill:#000000;fill-opacity:1;stroke:none;font-family:Amiri;-inkscape-font-specification:Amiri"
id="text2993">
<path
d="m 10.625514,10.953467 c 1.993145,1.7e-5 3.830315,0.182001 5.511514,0.545952 0.398615,2.391803 0.597931,3.674355 0.597947,3.84766 0.0087,0.07801 -0.05201,0.155999 -0.181984,0.23398 -0.130004,0.06934 -0.259993,0.104003 -0.389965,0.10399 -0.130004,1.3e-5 -0.233995,-0.02598 -0.311973,-0.07799 -0.493971,-2.530428 -2.192486,-3.795648 -5.095551,-3.795665 -1.2305667,1.7e-5 -2.3398011,0.381316 -3.3277062,1.143899 -0.9879187,0.762614 -1.7375185,1.715863 -2.2488017,2.859748 -0.5112923,1.14391 -0.7669362,2.331138 -0.7669324,3.561686 -3.8e-6,0.823269 0.086655,1.629197 0.2599771,2.417787 0.1819797,0.779937 0.4549554,1.520871 0.8189278,2.222804 0.3726286,0.701941 0.8189221,1.31722 1.338882,1.845837 0.5286132,0.528622 1.1655564,0.948918 1.9108315,1.260889 C 9.4859388,27.436014 10.2962,27.592 11.171466,27.592 c 1.343203,0 2.487101,-0.415963 3.431697,-1.24789 0.779917,-0.701936 1.308536,-1.70718 1.58586,-3.015734 0.303291,-0.02599 0.5806,0.04333 0.831927,0.207981 -1.6e-5,0.329309 -0.112673,1.000916 -0.33797,2.014823 -0.216664,1.013912 -0.407313,1.590194 -0.57195,1.728847 -1.386558,0.779932 -3.249726,1.169897 -5.589507,1.169897 -1.2565645,0 -2.4307931,-0.229646 -3.5226893,-0.688939 C 5.9069246,27.301693 4.9883399,26.686414 4.2430766,25.915147 3.4978061,25.143885 2.9085253,24.238299 2.4752325,23.198387 2.0506018,22.158485 1.8382874,21.066582 1.8382887,19.922676 c -1.3e-6,-1.204551 0.220979,-2.352782 0.6629415,-3.444696 0.4419587,-1.100557 1.0442383,-2.053805 1.8068407,-2.859748 0.762595,-0.81458 1.6941786,-1.460189 2.7947536,-1.936829 1.100562,-0.485274 2.2747906,-0.727919 3.5226895,-0.727936"
style=""
id="path2998" />
<path
d="m 27.420033,11.837389 c -0.753942,1.6e-5 -1.44288,0.147336 -2.066817,0.441961 -0.615286,0.28599 -1.130907,0.66729 -1.546864,1.143899 -0.407303,0.476639 -0.753939,1.035589 -1.039908,1.676852 -0.28598,0.641289 -0.493961,1.30423 -0.623945,1.988825 -0.121327,0.684617 -0.181988,1.386554 -0.181984,2.105814 -4e-6,1.022585 0.13865,2.032161 0.415963,3.028733 0.28597,0.996584 0.684601,1.90217 1.195895,2.71676 0.511282,0.814598 1.16989,1.473206 1.975825,1.975826 0.814587,0.502623 1.707174,0.753934 2.677764,0.753934 0.753923,0 1.442861,-0.142987 2.066818,-0.428962 0.623932,-0.29464 1.139553,-0.680272 1.546864,-1.156898 0.415949,-0.485288 0.766917,-1.048571 1.052907,-1.689851 0.294625,-0.649939 0.502607,-1.321545 0.623945,-2.014823 0.129973,-0.693265 0.194967,-1.399536 0.194983,-2.118813 -1.6e-5,-1.022567 -0.143003,-2.027811 -0.428963,-3.015734 -0.285989,-0.996567 -0.688953,-1.89782 -1.208893,-2.703762 -0.511302,-0.805914 -1.174243,-1.455856 -1.988825,-1.949828 -0.80594,-0.502606 -1.694194,-0.753917 -2.664765,-0.753933 m 0.389966,-0.883922 c 1.135222,1.7e-5 2.218459,0.220997 3.249713,0.662941 1.031229,0.433312 1.932482,1.031258 2.703762,1.793842 0.771249,0.762614 1.382194,1.69853 1.832838,2.807752 0.459275,1.100581 0.688921,2.283476 0.68894,3.548688 -1.9e-5,1.187236 -0.229665,2.326801 -0.68894,3.418698 -0.450644,1.083242 -1.061589,2.019159 -1.832838,2.807753 -0.762614,0.779932 -1.663867,1.403877 -2.703762,1.871835 -1.03992,0.459292 -2.123157,0.688938 -3.249713,0.688939 -1.135242,-1e-6 -2.218479,-0.216648 -3.249714,-0.649943 -1.022581,-0.44196 -1.915169,-1.04424 -2.677763,-1.806841 -0.762603,-0.762596 -1.369215,-1.69418 -1.81984,-2.794753 -0.450628,-1.100564 -0.675942,-2.279125 -0.67594,-3.535688 -2e-6,-1.195885 0.225312,-2.33545 0.67594,-3.418699 0.450625,-1.091891 1.052904,-2.027807 1.806841,-2.807752 0.762595,-0.788582 1.659515,-1.416859 2.690762,-1.884834 1.039901,-0.467942 2.123138,-0.701921 3.249714,-0.701938"
style=""
id="path3000" />
<path
d="m 41.523789,11.213444 c 0.450623,1.7e-5 1.15256,-0.04331 2.105815,-0.129989 0.147314,0.467976 0.537279,1.464554 1.169896,2.989737 0.641269,1.525211 1.403868,3.340716 2.287799,5.446519 0.883911,2.097155 1.568517,3.756674 2.053819,4.978561 0.01732,0.03467 0.05198,0.052 0.103991,0.052 0.06065,4e-6 0.103978,-0.03466 0.129988,-0.103991 2.530429,-6.525414 3.856311,-9.939776 3.977649,-10.243097 l 1.143899,-3.119725 c 1.109218,0.06934 1.793823,0.104008 2.053819,0.103991 1.074552,1.7e-5 2.045132,-0.03465 2.911744,-0.103991 l 0.07799,0.753934 c -0.242668,1.6e-5 -0.597969,0.05201 -1.065906,0.155986 -0.459314,0.09534 -0.719291,0.199332 -0.779932,0.311972 -0.08668,0.190666 -0.130008,0.51997 -0.129988,0.987913 0.01731,0.528635 0.03898,1.464551 0.06499,2.807753 0.03464,1.33456 0.06931,2.903086 0.103991,4.705585 0.04331,1.793847 0.07364,3.0764 0.09099,3.847661 0.03464,1.213228 0.138634,2.05382 0.311973,2.521777 0.05197,0.155987 0.298952,0.268644 0.740934,0.33797 0.450605,0.06933 0.81024,0.103992 1.078905,0.103991 0.06064,0.103992 0.09097,0.238313 0.09099,0.402965 -2.3e-5,0.164652 -0.01302,0.281642 -0.039,0.350969 -1.733201,-0.08666 -2.764442,-0.129989 -3.093727,-0.129989 -0.355321,0 -0.693291,0.0087 -1.01391,0.026 -0.320657,0.0087 -0.684625,0.026 -1.091904,0.052 -0.407315,0.026 -0.745284,0.04333 -1.013911,0.052 -0.03468,-0.03466 -0.05634,-0.138655 -0.06499,-0.311973 -1.6e-5,-0.181983 0.02165,-0.329303 0.06499,-0.441961 0.207965,1e-6 0.506939,-0.026 0.896921,-0.07799 0.389948,-0.06066 0.654258,-0.129987 0.79293,-0.207981 0.155968,-0.08666 0.233961,-0.450626 0.23398,-1.091904 -1.9e-5,-0.121321 -0.0087,-0.368299 -0.026,-0.740935 -0.01735,-0.381296 -0.02602,-0.63694 -0.026,-0.766932 -0.147338,-5.338187 -0.259995,-9.04719 -0.33797,-11.127019 -1.8e-5,-0.09531 -0.02168,-0.203634 -0.06499,-0.324971 -0.03468,-0.129974 -0.09101,-0.194968 -0.168985,-0.194983 -0.03468,1.5e-5 -0.07801,0.06068 -0.129989,0.181984 -0.398649,0.987927 -2.227152,5.572184 -5.485516,13.752787 -0.08667,0.190651 -0.242657,0.454961 -0.467959,0.79293 -0.225325,0.329305 -0.398643,0.506955 -0.519954,0.532953 -0.02601,0.0087 -0.104002,-0.0087 -0.233979,-0.05199 L 41.913755,13.111276 c -0.03467,1.663867 -0.08233,3.583363 -0.142987,5.758493 -0.052,2.166483 -0.09966,3.947324 -0.142988,5.342529 -0.03467,1.386547 -0.052,2.09715 -0.05199,2.131812 -5e-6,0.355303 0.03466,0.623946 0.103991,0.805929 0.06932,0.164653 0.355297,0.285975 0.857924,0.363967 0.502617,0.06933 0.901248,0.103992 1.195894,0.103991 0.06066,0.06933 0.09099,0.194984 0.09099,0.376967 -6e-6,0.181984 -0.013,0.30764 -0.039,0.376967 -0.233986,-0.0087 -0.524293,-0.026 -0.870923,-0.052 -0.346642,-0.026 -0.662947,-0.04333 -0.948917,-0.052 -0.285979,-0.01733 -0.597951,-0.026 -0.935917,-0.026 -0.355305,0 -0.688942,0.0087 -1.000912,0.026 -0.303309,0.0087 -0.649945,0.026 -1.039908,0.052 -0.389967,0.026 -0.723604,0.04333 -1.000912,0.052 -0.03466,-0.03466 -0.05633,-0.138655 -0.06499,-0.311973 -1e-6,-0.181983 0.02166,-0.329303 0.06499,-0.441961 0.285974,1e-6 0.680272,-0.039 1.182896,-0.116989 0.511286,-0.08666 0.818925,-0.203648 0.922918,-0.350969 0.181981,-0.259976 0.285972,-0.693271 0.311973,-1.299886 0.242642,-6.47342 0.363964,-10.615717 0.363968,-12.426904 -4e-6,-0.502607 -0.03467,-0.849243 -0.103991,-1.039908 -0.04333,-0.138639 -0.30331,-0.264294 -0.779931,-0.376967 -0.467961,-0.11264 -0.814597,-0.168969 -1.039909,-0.168985 -0.026,1.6e-5 -0.039,-0.116973 -0.039,-0.350969 -2e-6,-0.242629 0.013,-0.37695 0.039,-0.402965 0.303305,0.01735 0.606611,0.03901 0.90992,0.06499 0.31197,0.01735 0.593611,0.03468 0.844926,0.05199 0.259973,0.0087 0.567612,0.01302 0.922918,0.013"
style=""
id="path3002" />
</g>
</g>
</svg>
......@@ -31,7 +31,7 @@ from Orange.widgets import gui
from Orange.widgets.widget import OWWidget
from Orange.canvas.registry.description import InputSignal, OutputSignal
from id06workflow.core.experiment import Experiment
from id06workflow.core.experiment.operation.mapping import IntensityMapping
from id06workflow.core.experiment.operation.mapping import IntensityMapping, _MappingBase
from id06workflow.core.experiment.operation.ThreadedOperation import ThreadedOperation
from id06workflow.core.types import _Image
from id06workflow.gui.mapping import MappingPlot
......@@ -55,7 +55,8 @@ class MappingOW(OWWidget):
inputs = [InputSignal(name="data", handler='_process', type=Experiment)]
outputs = [OutputSignal(name="data", type=Experiment),
OutputSignal(name="image", type=_Image)]
OutputSignal(name="image", type=_Image),
OutputSignal(name='map', type=_MappingBase)]
want_main_area = True
resizing_enabled = True
......@@ -105,5 +106,6 @@ class MappingOW(OWWidget):
self._plot.setOperation(operation)
self.send("data", experiment)
self.send("map", operation)
OWWidget.accept(self)
......@@ -52,7 +52,6 @@ class MetadataTableOW(OWWidget):
keywords = ["metadata", "experiment", "motors"]
inputs = [InputSignal(name="data", type=Experiment, handler='_process')]
outputs = [OutputSignal(name="data", type=Experiment)]
want_main_area = True
resizing_enabled = True
......@@ -88,5 +87,3 @@ class MetadataTableOW(OWWidget):
_item.setText(metadata_slice[info])
# _item.setFlags(qt.Qt.ItemIsEnabled | qt.Qt.ItemIsSelectable)
self._table.setItem(row, column, _item)
self.send("data", experiment)
Markdown is supported
0% or
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment