Exemplo n.º 1
0
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        super(MoxaSetupForm, self).__init__(parent)

        self.setupUi(self)

        self.lock = QtCore.QReadWriteLock()
        self.MoxaSetupThread = MoxaSetupThread(self.lock, self)

        #self.MoxaSetupThread.connect( SIGNAL('setpBsetup'), self._pBsetup)
        self._initActions()  # setup button actions
Exemplo n.º 2
0
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        super(MoxaSetupForm, self).__init__(parent)

        self.setupUi(self)
        self.setWindowState(QtCore.Qt.WindowMaximized)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
        self.lock = QtCore.QReadWriteLock()
        self.MoxaSetupThread = MoxaSetupThread(self.lock, self)

        self._initActions()  # setup button actions
Exemplo n.º 3
0
    def __init__(self, parent=None):
        QtWidgets.QWidget.__init__(self, parent)
        super(MoxaSetupForm, self).__init__(parent)

        # titleBarHeight = self.style().pixelMetric(QtWidgets.QStyle.PM_TitleBarHeight, QtWidgets.QStyleOptionTitleBar(), self)

        self.setupUi(self)
        #self.showMaximized()
        self.setWindowState(QtCore.Qt.WindowMaximized)
        self.setWindowFlags(QtCore.Qt.FramelessWindowHint)
        self.lock = QtCore.QReadWriteLock()
        self.MoxaSetupThread = MoxaSetupThread(self.lock, self)

        #geometry = app.desktop().screenGeometry()
        #geometry.setHeight(geometry.height()- titleBarHeight )
        #self.setGeometry(geometry)
        self._initActions()  # setup button actions
Exemplo n.º 4
0
    def start(self, table_name, sql_insert_queue, sql_insert_mutex,
              sql_insert_condition):

        # table_name = "dfdfd"
        #
        # sql_insert_queue = Queue.Queue()
        # sql_insert_mutex = QtCore.QMutex()
        # sql_insert_condition = QtCore.QWaitCondition()

        self.rw_lock = QtCore.QReadWriteLock()

        mftsize = (os.path.getsize(self.options.filename)) / 1024
        self.mftsize = mftsize
        filename = self.options.filename

        self.mft_seqs_flag_list = [
            0
        ] * self.mftsize  # 0 empty, 1 parsering, 2 done.
        self.mft = {}

        self.thread_no = max(1, QtCore.QThread.idealThreadCount())
        self.thread_no = 10  # 1'26''
        self.thread_no = 1  # 1'12''
        printself.thread_no
        self.thread_pool = [
            MftWorkerThread(self.mft,
                            self.mft_seqs_flag_list,
                            mftsize,
                            filename,
                            self.rw_lock,
                            sql_insert_queue,
                            sql_insert_mutex,
                            sql_insert_condition,
                            table_name,
                            self.options,
                            parent=self.parent) for _ in range(self.thread_no)
        ]

        for thread in self.thread_pool:
            # thread.add_row_to_model_SIGNAL.connect(self.target_slot)
            # thread.update_progress_SIGNAL.connect(self.update_progress_slot)
            thread.start()
Exemplo n.º 5
0
 def __init__(self):
     QtCore.QObject.__init__(self)
     self.__lock = QtCore.QReadWriteLock()
Exemplo n.º 6
0
 def __init__(self):
     super().__init__()
     self.__lock = QtCore.QReadWriteLock()
Exemplo n.º 7
0
class DataModel(QtCore.QObject):
    """the data model
    emits signals when source/time position has changed
    """
    _dataSourceChanged = QtCore.pyqtSignal()
    _dataPosChanged = QtCore.pyqtSignal(int)

    _rwLock = QtCore.QReadWriteLock()

    def __init__(self, dataContainer=None, prefetchSize=0):
        assert prefetchSize >= 0

        super(DataModel, self).__init__()
        self.dataLoadThread = DataLoadThread(self._rwLock)
        self._dataSourceChanged.connect(self.dataSourceChanged)
        self._dataPosChanged.connect(self.dataPosChanged)
        if dataContainer:
            self.setContainer(dataContainer, prefetchSize)

    @classmethod
    def fromPath(self, fName, prefetchSize=0):
        d = DataModel()
        d.loadFromPath(fName, prefetchSize)
        return d

    def setContainer(self, dataContainer=None, prefetchSize=0):
        self.dataContainer = dataContainer
        self.prefetchSize = prefetchSize
        self.nset = [0]
        self.data = defaultdict(lambda: None)

        if self.dataContainer:
            self.stopDataLoadThread()
            self.dataLoadThread.load(self.nset, self.data, self.dataContainer)
            self.dataLoadThread.start(priority=QtCore.QThread.LowPriority)
            self._dataSourceChanged.emit()
            self.setPos(0)

    def __repr__(self):
        return "DataModel: %s \t %s" % (self.dataContainer.name, self.size())

    def dataSourceChanged(self):
        logger.debug("data source changed:\n%s", self)

    def dataPosChanged(self, pos):
        logger.debug("data position changed to %i", pos)

    def stopDataLoadThread(self):
        self.dataLoadThread.stopped = True

    def prefetch(self, pos):
        self._rwLock.lockForWrite()
        self.nset[:] = self.neighborhood(pos)
        self._rwLock.unlock()

    def sizeT(self):
        if self.dataContainer:
            return self.dataContainer.sizeT()

    def size(self):
        if self.dataContainer:
            return self.dataContainer.size()

    def name(self):
        if self.dataContainer:
            return self.dataContainer.name

    def stackUnits(self):
        if self.dataContainer:
            return self.dataContainer.stackUnits

    def setPos(self, pos):
        if pos < 0 or pos >= self.sizeT():
            raise IndexError("setPos(pos): %i outside of [0,%i]!" %
                             (pos, self.sizeT() - 1))
            return

        if not hasattr(self, "pos") or self.pos != pos:
            self.pos = pos
            self._dataPosChanged.emit(pos)
            self.prefetch(self.pos)

    def __getitem__(self, pos):
        # self._rwLock.lockForRead()
        if not hasattr(self, "data"):
            print(
                "something is wrong in datamodel as its lacking a 'data' atttribute!"
            )
            return None

        # switching of the prefetched version for now...
        # as for some instances there seems to be a race condition still

        self._rwLock.lockForWrite()

        if pos not in self.data:
            newdata = self.dataContainer[pos]
            self.data[pos] = newdata
        else:
            newdata = self.data[pos]

        self._rwLock.unlock()

        self.prefetch(pos)
        return newdata

    def neighborhood(self, pos):
        # FIXME mod stackSize!
        return np.arange(pos, pos + self.prefetchSize + 1) % self.sizeT()

    def loadFromPath(self, fName, prefetchSize=0):
        if isinstance(fName, (tuple, list)):
            if re.match(".*\.(tif|tiff)", fName[0]):
                self.setContainer(TiffMultipleFiles(fName), prefetchSize)
            elif re.match(".*\.(raw)", fName[0]):
                self.setContainer(RawMultipleFiles(fName), prefetchSize=0)

        elif re.match(".*\.(tif|tiff)", fName):
            self.setContainer(TiffData(fName), prefetchSize=0)
        elif re.match(".*\.(raw)", fName):
            self.setContainer(RawData(fName), prefetchSize=0)
        elif re.match(".*\.(png|jpg|bmp)", fName):
            self.setContainer(Img2dData(fName), prefetchSize=0)
        # elif re.match(".*\.h5",fName):
        #     self.setContainer(HDF5Data(fName),prefetchSize = 0)
        elif re.match(".*\.czi", fName):
            self.setContainer(CZIData(fName), prefetchSize=0)
        elif os.path.isdir(fName):
            if os.path.exists(os.path.join(fName, "metadata.txt")):
                self.setContainer(SpimData(fName), prefetchSize)
            elif os.path.exists(os.path.join(fName, "default.index.txt")):
                self.setContainer(XwingData(fName), prefetchSize)
            else:
                self.setContainer(TiffFolderData(fName),
                                  prefetchSize=prefetchSize)