コード例 #1
0
    def setupToolBar(self):
        toolBar = QToolBar()
        self.toolbar = self.addToolBar(toolBar)

        logProcessingView = QToolButton()
        logProcessingView.setText("Log Processing View")
        logProcessingView.setCheckable(True)
        logProcessingView.clicked.connect(lambda: self.updateView(1))

        analysisView = QToolButton()
        analysisView.setText("Analysis View")
        analysisView.setCheckable(True)
        analysisView.clicked.connect(lambda: self.updateView(0))

        actionreportView = QToolButton()
        actionreportView.setText("Action Report")
        actionreportView.setCheckable(True)
        actionreportView.clicked.connect(lambda: self.updateView(2))

        group = QButtonGroup(self)
        group.exclusive()

        for button in (analysisView, logProcessingView, actionreportView):
            toolBar.addWidget(button)
            group.addButton(button)
コード例 #2
0
class MDFA(QMainWindow):
    def __init__(self):
        super().__init__()
        self.initUI()
#%%

    def cargarSenial(self):
        self.aux = False
        self.list3.clear()
        self.list_MDFA.clear()
        self.plot1.clear()
        self.nombreSenial = QFileDialog.getOpenFileNames(
            None, 'Open file(s)', '/home')
        self.rutas = self.nombreSenial[0]

        self.dialog = Dialog(
            str(len(self.rutas)) + ' Files(s) loaded', 'open.png')
        self.dialog.show()
        self.list3.addItem('')
        for i in range(len(self.rutas)):
            names = str.split(self.rutas[i], "/")
            t = len(names)
            nombre = names[t - 1]
            self.list3.addItem(nombre)

        if (len(self.rutas) == 0):
            self.lbl_num_files.setStyleSheet("color : red; ")
            self.lbl_num_files.setText("Files loaded: " + str(len(self.rutas)))
        else:
            self.lbl_num_files.setStyleSheet("color : blue; ")
            self.lbl_num_files.setText("Files loaded: " + str(len(self.rutas)))
        self.aux = True
        self.btnMDFA.setEnabled(True)
#%%

    def plots(self):
        if (self.aux == True):
            self.plot1.clear()
            i = self.list3.currentIndex() - 1
            if (len(self.rutas) != 0):
                data = pd.read_csv(self.rutas[i], sep='\t', header=None)
                lineas = data.shape[1]
                if (lineas == 1):
                    self.y = np.asarray(data[0])
                elif (lineas == 2):
                    self.y = np.asarray(data[1])
                self.plot1.setLabel('bottom',
                                    color='k',
                                    **{'font-size': '14pt'})
                self.plot1.getAxis('bottom').setPen(
                    pg.mkPen(color='k', width=1))
                # Y1 axis
                self.plot1.setLabel('left', color='k', **{'font-size': '14pt'})
                self.plot1.getAxis('left').setPen(pg.mkPen(color='k', width=1))
                names = str.split(self.rutas[i], "/")
                t = len(names)
                nombre = names[t - 1]
                self.plot1.setTitle(nombre)
                self.plot1.plot(self.y, pen='k')
#%%

    def print_val(self):
        print(str(self.plots.checkedId()))

#%%

    def MDFA(self):
        self.t_inicial = time()
        self.plot1.clear()
        qmax = int(self.txtQmax.text())
        qmin = int(self.txtQmin.text())
        dq = float(self.txtdQ.text())
        q = np.arange(qmin, qmax, dq)
        m = int(self.txtm.text())
        xn = np.arange(0, 135, 1)
        func = np.vectorize(lambda x: int(10.1 * math.exp(0.0866 * x)))
        n = func(xn)
        self.alphas = np.transpose(np.zeros((len(q) - 1, len(self.rutas))))
        self.fespectros = np.transpose(np.zeros((len(q) - 1, len(self.rutas))))
        self.qs = np.transpose(np.zeros((len(q) - 1, len(self.rutas))))
        self.taus = np.transpose(np.zeros((len(q) - 1, len(self.rutas))))
        self.hches = np.transpose(np.zeros((len(q) - 1, len(self.rutas))))
        for i in range(len(self.rutas)):
            R = []
            self.y = np.asarray(
                pd.read_csv(self.rutas[i], sep='\t', header=None))
            val = len(self.y) / 4
            s = n[n < val]
            if (self.int_state == 0):
                Y = np.cumsum((self.y - np.mean(self.y)))
            elif (self.int_state == 1):
                Y = np.cumsum((self.y - np.mean(self.y)))
                Y = np.cumsum((Y - np.mean(Y)))
            YRev = Y
            N = len(Y)
            q = np.arange(qmin, qmax, dq)
            Fq = np.zeros((len(s), len(q)))
            znumb = np.where((q >= -0.1) & (q <= 0.1))[0][-1] - 1
            for ns in range(len(s)):
                Ns = int(N / s[ns])
                Var = np.zeros((Ns, len(q)))
                Varr = np.zeros((Ns, len(q)))
                for v in range(Ns):
                    SegNumb = np.arange(((v + 1) - 1) * s[ns], (v + 1) * s[ns])
                    Seg = Y[SegNumb]
                    SegRev = YRev[SegNumb]
                    poly = np.polyfit(SegNumb, Seg, m)
                    polyr = np.polyfit(SegNumb, SegRev, m)
                    fit = np.polyval(poly, SegNumb)
                    fitr = np.polyval(polyr, SegNumb)
                    myfunc(q, Var, Varr, v, Seg, fit, s, ns, SegRev, fitr)
                Var = np.transpose(Var)
                Varr = np.transpose(Varr)
                for nq in range(len(q)):
                    Fq[ns][nq] = pow(
                        (sum(Var[:][nq]) + sum(Varr[:][nq])) / (2 * Ns),
                        1 / q[nq])
                Fq[ns][znumb] = (Fq[ns][znumb - 1] + Fq[ns][znumb + 1]) / 2
                del (Var, Varr)
            logFq = np.log10(Fq)
            logFq = np.transpose(logFq)
            Hq = np.zeros(len(q))
            fes = []
            eses = []
            for nq in range(len(q)):
                f = np.transpose(logFq[:][nq])
                fes.append(f)
                eses.append(np.log10(s))
                P = np.polyfit(np.log10(s), logFq[:][nq], 1)
                if (self.int_state == 0):
                    Hq[nq] = P[0]
                elif (self.int_state == 1):
                    Hq[nq] = P[0] - 1
                ajuste = []
                for w in range(len(s)):
                    ajuste.append((Hq[nq] + 1) * np.log10(s[w]) + P[1])
                rcuadrada = round(r2_score(f, ajuste), 4)
                R.append(rcuadrada)
            # fes = pd.DataFrame(fes)
            # fes.to_csv(self.rutas[i]+'F(sq).txt', sep = '\t', index = False, header = None)
            # eses = pd.DataFrame(eses)
            # eses.to_csv(self.rutas[i]+'s.txt', sep = '\t', index = False, header = None)

            # ajustes = pd.DataFrame(R)
            # ajustes.to_csv(self.rutas[i]+'R_cuadrada.txt', sep = '\t', index = False, header = None)

            t = q * Hq - 1
            α = np.diff(t) / dq
            Hq = Hq[0:len(Hq) - 1]
            t = t[0:len(t) - 1]
            q = q[0:len(q) - 1]
            ####### α y f(α) #############################################
            fα = np.zeros(len(t))
            fα = q * α - t
            self.fα = fα
            self.α = α
            self.t = t
            self.Hq = Hq
            self.q = q
            self.btnMDFA.setEnabled(False)
            self.t_final = time()
            self.tiempo = round(float(self.t_final - self.t_inicial), 4)
            self.txttime.setText(str(self.tiempo))
            self.alphas[:][i] = self.α
            self.fespectros[:][i] = self.fα
            self.taus[:][i] = self.t
            self.hches[:][i] = self.Hq
            self.qs[:][i] = self.q
        self.list_MDFA.addItem('')
        for i in range(len(self.rutas)):
            names = str.split(self.rutas[i], "/")
            t = len(names)
            nombre = names[t - 1]
            self.list_MDFA.addItem(nombre)
        self.alphas = np.transpose(self.alphas)
        self.fespectros = np.transpose(self.fespectros)
        self.taus = np.transpose(self.taus)
        self.hches = np.transpose(self.hches)
        self.qs = np.transpose(self.qs)
        self.dialogo_done = Dialog('Done!!', 'Icons\listo.png')
        self.dialogo_done.show()
#%%

    def plots_MDFA(self):
        self.alphas2 = np.transpose(self.alphas)
        self.fespectros2 = np.transpose(self.fespectros)
        self.taus2 = np.transpose(self.taus)
        self.hches2 = np.transpose(self.hches)
        self.qs2 = np.transpose(self.qs)
        op = self.plots.checkedId()
        if (op == -2):
            if (self.aux == True):
                self.plot1.clear()
                i = self.list_MDFA.currentIndex() - 1
                if (len(self.rutas) != 0):
                    self.plot1.setLabel('bottom',
                                        'α',
                                        color='k',
                                        **{'font-size': '14pt'})
                    self.plot1.getAxis('bottom').setPen(
                        pg.mkPen(color='k', width=1))
                    # Y1 axis
                    self.plot1.setLabel('left',
                                        'f(α)',
                                        color='k',
                                        **{'font-size': '14pt'})
                    self.plot1.getAxis('left').setPen(
                        pg.mkPen(color='k', width=1))
                    names = str.split(self.rutas[i], "/")
                    t = len(names)
                    nombre = names[t - 1]
                    self.plot1.setTitle(nombre)
                    self.plot1.plot(self.alphas2[i],
                                    self.fespectros2[i],
                                    pen='r',
                                    symbol='o',
                                    symbolSize=10)
        elif (op == -3):
            if (self.aux == True):
                self.plot1.clear()
                i = self.list_MDFA.currentIndex() - 1
                if (len(self.rutas) != 0):
                    self.plot1.setLabel('bottom',
                                        'q',
                                        color='k',
                                        **{'font-size': '14pt'})
                    self.plot1.getAxis('bottom').setPen(
                        pg.mkPen(color='k', width=1))
                    # Y1 axis
                    self.plot1.setLabel('left',
                                        'τ(q)',
                                        color='k',
                                        **{'font-size': '14pt'})
                    self.plot1.getAxis('left').setPen(
                        pg.mkPen(color='k', width=1))
                    names = str.split(self.rutas[i], "/")
                    t = len(names)
                    nombre = names[t - 1]
                    self.plot1.setTitle(nombre)
                    self.plot1.plot(self.qs2[i],
                                    self.taus2[i],
                                    pen='r',
                                    symbol='o',
                                    symbolSize=10)

        elif (op == -4):
            if (self.aux == True):
                self.plot1.clear()
                i = self.list_MDFA.currentIndex() - 1
                if (len(self.rutas) != 0):
                    self.plot1.setLabel('bottom',
                                        'q',
                                        color='k',
                                        **{'font-size': '14pt'})
                    self.plot1.getAxis('bottom').setPen(
                        pg.mkPen(color='k', width=1))
                    self.plot1.setLabel('left',
                                        'h(q)',
                                        color='k',
                                        **{'font-size': '14pt'})
                    self.plot1.getAxis('left').setPen(
                        pg.mkPen(color='k', width=1))
                    names = str.split(self.rutas[i], "/")
                    t = len(names)
                    nombre = names[t - 1]
                    self.plot1.setTitle(nombre)
                    self.plot1.plot(self.qs2[i],
                                    self.hches2[i],
                                    pen='r',
                                    symbol='o',
                                    symbolSize=10)

#%%

    def saveFile(self):
        nom = QFileDialog.getSaveFileName(None, 'Saving Data in Current Plot')

        writer = pd.ExcelWriter(nom[0] + ".xlsx")

        a = pd.DataFrame(self.alphas)
        a.to_excel(writer, 'Atable', index=False, header=None)

        f = pd.DataFrame(self.fespectros)
        f.to_excel(writer, 'Ftable', index=False, header=None)

        t = pd.DataFrame(self.taus)
        t.to_excel(writer, 'Ttable', index=False, header=None)

        H = pd.DataFrame(self.hches)
        H.to_excel(writer, 'Htable', index=False, header=None)

        q = pd.DataFrame(self.qs)
        q.to_excel(writer, 'Qtable', index=False, header=None)

        writer.save()
#%%

    def state_check(self, state):
        if (state == Qt.Checked):
            self.int_state = 1
        else:
            self.int_state = 0
#%%

    def initUI(self):
        pg.setConfigOption('background', 'w')
        self.setWindowTitle('Multifractal Detrended Analysis Fluctuation')
        self.setWindowIcon(QIcon("Icons\multifractal.ico"))
        ########Variables Globales ####################################################
        ###############################################################################
        self.rutas = None
        self.nombreSenial = ''
        self.int_state = 0
        contain = QSplitter(Qt.Horizontal)
        botones = QVBoxLayout()
        graficos = QVBoxLayout()

        results1 = QFormLayout()
        results2 = QFormLayout()
        results3 = QFormLayout()
        group_box_files = QGroupBox("Load file(s)")
        group_box_settings = QGroupBox("Settings")
        group_box_plots = QGroupBox("Plots")
        #################################################################
        ##     Elementos del layout botones
        #################################################################
        font_size = 'font-size: 18px'

        self.btnLoadSig = QPushButton('Load signal')
        self.btnLoadSig.clicked.connect(self.cargarSenial)
        self.btnLoadSig.setStyleSheet(font_size)
        self.btnLoadSig.setEnabled(True)

        self.btnMDFA = QPushButton('MFDFA')
        self.btnMDFA.clicked.connect(self.MDFA)
        self.btnMDFA.setStyleSheet(font_size)
        self.btnMDFA.setEnabled(False)

        self.btnSavechar = QPushButton('Save data')
        self.btnSavechar.clicked.connect(self.saveFile)
        self.btnSavechar.setStyleSheet(font_size)

        self.txtQmax = QLineEdit('5')
        self.txtQmax.setEnabled(True)
        self.txtQmax.setStyleSheet(font_size)

        self.txtQmin = QLineEdit('-5')
        self.txtQmin.setEnabled(True)
        self.txtQmin.setStyleSheet(font_size)

        self.txtdQ = QLineEdit('0.1')
        self.txtdQ.setEnabled(True)
        self.txtdQ.setStyleSheet(font_size)

        self.txtm = QLineEdit('1')
        self.txtm.setEnabled(True)
        self.txtm.setStyleSheet(font_size)

        lbl_check1 = QLabel("Nonstationary ts:")
        lbl_check1.setStyleSheet(font_size)
        self.check1 = QCheckBox()
        self.check1.stateChanged.connect(self.state_check)

        self.lbl_num_files = QLabel("Files loaded: ")
        self.lbl_num_files.setStyleSheet(font_size)

        lbl_file = QLabel("File: ")
        lbl_file.setStyleSheet("font-size: 18px")
        self.list3 = QComboBox()
        self.list3.currentIndexChanged.connect(self.plots)

        self.lbltime = QLabel("Exe. time:")
        self.lbltime.setStyleSheet(font_size)
        self.txttime = QLabel("")
        self.txttime.setStyleSheet(font_size)

        b1 = QRadioButton("f(α) Vs α")
        b1.setStyleSheet(font_size)

        b2 = QRadioButton("τ(q) Vs q")
        b2.setStyleSheet(font_size)

        b3 = QRadioButton("h(q) Vs q")
        b3.setStyleSheet(font_size)

        self.plots = QButtonGroup()
        self.plots.addButton(b1)
        self.plots.addButton(b2)
        self.plots.addButton(b3)
        self.plots.exclusive()
        self.plots.buttonClicked.connect(self.print_val)

        lbl_MDFA = QLabel("File: ")
        lbl_MDFA.setStyleSheet(font_size)

        self.list_MDFA = QComboBox()
        self.list_MDFA.currentIndexChanged.connect(self.plots_MDFA)

        #################################################################
        ##     Elementos del layout graficos
        #################################################################
        self.plot1 = pg.PlotWidget()
        self.plot1.setLabel('bottom', " ", color='k', **{'font-size': '20pt'})
        self.plot1.getAxis('bottom').setPen(pg.mkPen(color='k', width=1))
        # Y1 axis
        self.plot1.setLabel('left', " ", color='k', **{'font-size': '20pt'})
        self.plot1.getAxis('left').setPen(pg.mkPen(color='k', width=1))
        self.plot1.showGrid(1, 1, 0.2)
        #################################################################
        ##     Colocar elementos en layout botones
        #################################################################
        results1.addRow(self.btnLoadSig)
        results1.addRow(self.lbl_num_files)
        results1.addRow(lbl_file, self.list3)
        group_box_files.setLayout(results1)

        results2.addRow(lbl_check1, self.check1)
        results2.addRow('Q+:', self.txtQmax)
        results2.addRow('Q-:', self.txtQmin)
        results2.addRow('dQ:', self.txtdQ)
        results2.addRow('m:', self.txtm)
        results2.addRow(self.lbltime, self.txttime)
        group_box_settings.setLayout(results2)

        results3.addRow(lbl_MDFA, self.list_MDFA)
        results3.addRow(b1)
        results3.addRow(b2)
        results3.addRow(b3)
        group_box_plots.setLayout(results3)

        botones.addWidget(group_box_files)
        botones.addWidget(group_box_settings)
        botones.addWidget(group_box_plots)

        botones.addWidget(self.btnMDFA)
        botones.addWidget(self.btnSavechar)
        #################################################################
        ##     Colocar elementos en layout graficos
        #################################################################
        graficos.addWidget(self.plot1)
        bot = QWidget()
        bot.setLayout(botones)
        gra = QWidget()
        gra.setLayout(graficos)
        contain.addWidget(bot)
        contain.addWidget(gra)
        self.setCentralWidget(contain)