Commit a8794a3c authored by JosefBrandt's avatar JosefBrandt Committed by Josef Brandt
Browse files

Tidying up

parent d6af372b
Loading
Loading
Loading
Loading

.gitignore

0 → 100644
+8 −0
Original line number Diff line number Diff line

__pycache__/

gepard\.cfg

analysis/database_config\.txt

*.so
+11 −17
Original line number Diff line number Diff line
@@ -41,7 +41,6 @@ class ParticleIndicator(QtWidgets.QPushButton):
        
        qp = QtGui.QPainter()
        qp.begin(self)
        #qp.fillRect(self.rect(), QtCore.Qt.white)
        qp.setBrush(QtCore.Qt.white)
        qp.drawRoundedRect(0, 0, width, height, 5. ,5.)
        qp.setPen(self.color)
@@ -116,7 +115,6 @@ class SpectraPlot(QtWidgets.QGroupBox):
        layout = QtWidgets.QHBoxLayout()
        self.canvas = FigureCanvas(Figure())
        self.spec_axis = self.canvas.figure.subplots()
        self.spec_axis.axis("off")
        self.reference_ax = self.spec_axis.twinx()
        self.canvas.figure.subplots_adjust(left=0.1, top=0.93, bottom=0.15, right=0.9)
        specNavigation = NavigationToolbar(self.canvas, self)
@@ -127,21 +125,21 @@ class SpectraPlot(QtWidgets.QGroupBox):
        layout.addWidget(self.canvas)
        self.setLayout(layout)
        
    def loadSpectraAndInitializeSpecPlot(self):  #formerly updateData(self)....
        self.spectra = self.dataset.particleContainer.spectra
        assert self.spectra is not None
    def loadSpectraAndInitializeSpecPlot(self):
        self.spectra = self.dataset.particleContainer.getSpectraFromDisk()
        self.canvas.draw()
        
    def updateParticleSpectrum(self, specIndex, particleSize, hqi):
        if self.spectra is not None:
    def updateParticleSpectrum(self, specIndex, assignment, particleSize, hqi):
        #draw Sample Spectrum
        self.spec_axis.axis("on")
        self.spec_axis.clear()
            self.spec_axis.plot(self.spectra[:, 0], self.spectra[:, specIndex+1])
        self.spec_axis.tick_params(axis='both', which='both', labelsize=15)
        self.spec_axis.set_xlabel('Wavenumber (cm-1)', fontsize = 15)
        self.spec_axis.set_ylabel('Counts', fontsize = 15)
            self.spec_axis.set_title('ScanPoint Number {}, Size = {} µm, HQI = {}'.format(specIndex+1, particleSize, hqi))
        
        if self.spectra is not None:
            self.spec_axis.plot(self.spectra[:, 0], self.spectra[:, specIndex+1])
            self.spec_axis.set_title('{}, ScanPoint Number {}, Size = {} µm, HQI = {}'.format(assignment, specIndex+1, particleSize, hqi))
            self.spec_axis.set_xbound(100, (3400 if self.spectra[-1, 0] > 3400 else self.spectra[-1, 0]))
            wavenumber_diff = list(self.spectra[:, 0]-100)
            y_start = wavenumber_diff.index(min(wavenumber_diff))
@@ -159,10 +157,6 @@ class SpectraPlot(QtWidgets.QGroupBox):
        self.reference_axis.set_ylabel('Ref. Intensity', fontsize = 15, color = 'r')
        self.reference_axis.tick_params('y', colors = 'r')
        self.reference_axis.set_xbound(100, (3400 if self.spectra[-1, 0] > 3400 else self.spectra[-1, 0]))
#        wavenumber_diff = list(ref[:, 0]-100)
#        y_start = wavenumber_diff.index(min(wavenumber_diff))
#        y_min = min(ref[y_start:, specIndex+1])
#        y_max = max(ref[y_start:, specIndex+1])
        
        self.canvas.draw()

+20 −51
Original line number Diff line number Diff line
@@ -29,7 +29,7 @@ from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure
from matplotlib.backends.backend_qt5agg import NavigationToolbar2QT as NavigationToolbar

from .analysiswidgets import ExpExcelDialog
from .excelexport import ExpExcelDialog
from .analysisplots import TypeHistogramView, SpectraPlot
from .loadresults import LoadTrueMatchResults
from .database import DataBaseWindow
@@ -45,7 +45,7 @@ except:
class ParticleAnalysis(QtWidgets.QMainWindow):
    def __init__(self, dataset, viewparent=None):
        super(ParticleAnalysis, self).__init__(viewparent)
        self.setGeometry(100, 100, 1680, 1050)
        self.resize(1680, 1050)
        self.setWindowTitle('Results of polymer analysis')
        self.layout = QtWidgets.QHBoxLayout()
        self.widget = QtWidgets.QWidget()
@@ -56,7 +56,6 @@ class ParticleAnalysis(QtWidgets.QMainWindow):
        self.dataset = dataset
        self.particleContainer = dataset.particleContainer
        
#        self.additivePlot = None
        self.importWindow = None
        
        self.polymerCheckBoxes = []
@@ -64,10 +63,8 @@ class ParticleAnalysis(QtWidgets.QMainWindow):
        
        self.currentParticleIndex = 0
        self.currentSpectrumIndex = 0
#        self.lastSpectrumInFocus = None
        
        self.typeHistogramPlot = TypeHistogramView(self)
#        self.typeHistogramPlot.indexClicked.connect(self.getAdditivePlot)
        self.sizeHistogramCanvas = FigureCanvas(Figure())
       
        sizeHistGroup = QtWidgets.QGroupBox()
@@ -171,16 +168,8 @@ class ParticleAnalysis(QtWidgets.QMainWindow):
        self.hqiSpinBox.valueChanged.connect(self.applyHQIThresholdToResults)
        optionsLayout.addRow(QtWidgets.QLabel('minimum HQI:'), self.hqiSpinBox)
        
#        self.compHqiSpinBox = QtWidgets.QDoubleSpinBox()
#        self.compHqiSpinBox.setValue(30.0)
#        self.compHqiSpinBox.setDecimals(1)
#        self.compHqiSpinBox.setMinimum(0)
#        self.compHqiSpinBox.setDisabled(True)
#        optionsLayout.addRow(QtWidgets.QLabel('min component HQI'), self.compHqiSpinBox)
        
        self.optionsGroup.setLayout(optionsLayout)
        self.optionsGroup.setMinimumWidth(175)
#        self.optionsGroup.setDisabled(True)
        
        self.resultScrollarea = QtWidgets.QScrollArea(self)
        self.resultScrollarea.setFixedWidth(250)
@@ -210,16 +199,13 @@ class ParticleAnalysis(QtWidgets.QMainWindow):
        self.layout.addLayout(viewLayout)
        
        minHQI = self.dataset.resultParams['minHQI']
#        compHQI = self.dataset.resultParams['compHQI']
        if minHQI is not None:
            self.hqiSpinBox.setValue(minHQI)
#            self.compHqiSpinBox.setValue(compHQI)
         
        self.createActions()
        self.createMenus()
        self.applyHQIThresholdToResults()
        self.createHistogramData()
        self.particleContainer.loadSpectra()
        self.initializeSpecPlot()
        self.setTypeSelector()
        self.updateHistogramsAndContours()
@@ -228,8 +214,8 @@ class ParticleAnalysis(QtWidgets.QMainWindow):
        self.loadTrueMatchAct = QtWidgets.QAction("Load &TrueMatch Results", self)
        self.loadTrueMatchAct.triggered.connect(self.importTrueMatchResults)
        
        self.loadTextFileAct = QtWidgets.QAction("Load &ordered Text File", self)
        self.loadTextFileAct.setDisabled(True)
        self.loadSpectraAct = QtWidgets.QAction("Load &Spectra", self)
        self.loadSpectraAct.triggered.connect(self.initializeSpecPlot)
        
        self.noOverlayAct = QtWidgets.QAction("&No Overlay", self)
        self.selOverlayAct = QtWidgets.QAction("&Selected Overlay", self)
@@ -266,8 +252,8 @@ class ParticleAnalysis(QtWidgets.QMainWindow):
        self.expSQLAct.triggered.connect(self.exportToSQL)
    
    def createMenus(self):
        self.importMenu = QtWidgets.QMenu("&Import Results")
        self.importMenu.addActions([self.loadTrueMatchAct, self.loadTextFileAct])
        self.importMenu = QtWidgets.QMenu("&Import Spectra and Results")
        self.importMenu.addActions([self.loadSpectraAct, self.loadTrueMatchAct])
        
        self.dispMenu = QtWidgets.QMenu("&Display", self)
        self.overlayActGroup = QtWidgets.QActionGroup(self.dispMenu)
@@ -295,6 +281,10 @@ class ParticleAnalysis(QtWidgets.QMainWindow):
        self.menuBar().addMenu(self.toolMenu)
        self.menuBar().addMenu(self.exportMenu)
    
    def keyPressEvent(self, event):
        if event.key() in [QtCore.Qt.Key_Return, QtCore.Qt.Key_Enter]:
            self.jumpToIndicatedSpectrum()
    
    def launchDBManager(self):
        if self.dbWin.isHidden():
            self.dbWin.show()
@@ -314,15 +304,6 @@ class ParticleAnalysis(QtWidgets.QMainWindow):
        self.importWindow = LoadTrueMatchResults(self.particleContainer, self)
        self.importWindow.exec()
        
#    @QtCore.pyqtSlot(int)
#    def getAdditivePlot(self, clickedindex):
#        polymer = self.datastats.typehistogram[clickedindex][0]        #get the polymer name, that was clicked on
#      
#        if self.datastats.sorted_additives is not None and \
#           len(self.datastats.sorted_additives[clickedindex]) > 0:            
#            self.additivePlot = AdditiveViewer(polymer, self.datastats.sorted_additives[clickedindex])
#            self.additivePlot.show()
    
    @QtCore.pyqtSlot()
    def applyHQIThresholdToResults(self):
        hqi = self.hqiSpinBox.value()
@@ -409,14 +390,6 @@ class ParticleAnalysis(QtWidgets.QMainWindow):
        numParticles = self.particleContainer.getNumberOfParticles()
        self.specNumberSelector.setMaximum(numParticles)
        
#        if self.lastSpectrumInFocus is not None:
#            self.currentSpectrumIndex = self.lastSpectrumInFocus
#            self.displayNewPolymerType(resetCurrentIndex=False)
#            print('displaying new type without resetting index')
#        else:
#            print('displaying new type with resetting index')
#            self.displayNewPolymerType()
        
    def initializeSpecPlot(self):
        self.specPlot.loadSpectraAndInitializeSpecPlot()
        self.updateSpecPlot()
@@ -475,8 +448,8 @@ class ParticleAnalysis(QtWidgets.QMainWindow):
    def updateSpecPlot(self):
        particleSize = np.round(self.particleContainer.getSizeOfParticleByIndex(self.currentParticleIndex))
        hqi = self.particleContainer.getHQIOfSpectrumIndex(self.currentSpectrumIndex)
        self.specPlot.updateParticleSpectrum(self.currentSpectrumIndex, particleSize, hqi)
#        self.lastSpectrumInFocus = self.currentSpectrumIndex
        assignment = self.particleContainer.getParticleAssignmentByIndex(self.currentParticleIndex)
        self.specPlot.updateParticleSpectrum(self.currentSpectrumIndex, assignment, particleSize, hqi)
            
        if self.refSelector.isEnabled() and self.refSelector.currentText() != '':
            refID = self.dbWin.activeDatabase.spectraNames.index(self.refSelector.currentText())
@@ -540,14 +513,13 @@ class ParticleAnalysis(QtWidgets.QMainWindow):
        self.updateSpecPlot()
        self.jumpToIndicatedSpectrum()
    
    def setWidgetsToNewParticleIndex(self, particleIndex):   #TODO: Probably refactor. Its basically a combination of the above methods... Just a bit different to avoid directly jumping to the particle in sampleview
    def setWidgetsToNewParticleIndex(self, particleIndex):
        try:
            self.particleSelector.valueChanged.disconnect()
            self.spectrumSelector.valueChanged.disconnect()
            self.typeSelectorCombo.currentIndexChanged.disconnect()
        except TypeError:
            pass #signals were not connected...
        
            pass #signals were not connected, nothing to disconnect...
        
        assignment = self.particleContainer.getParticleAssignmentByIndex(particleIndex)
        self.typeSelectorCombo.setCurrentText(assignment)
@@ -573,16 +545,13 @@ class ParticleAnalysis(QtWidgets.QMainWindow):
        self.spectrumSelector.valueChanged.connect(self.setSpecSelector)
        self.particleSelector.valueChanged.connect(self.setParticleSelector)
        
    def jumpToIndicatedSpectrum(self):   #TODO: This should be transferred to sampleview...
    def jumpToIndicatedSpectrum(self):
        self.currentSpectrumIndex = self.specNumberSelector.value()-1
        self.currentParticleIndex = self.particleContainer.getParticleIndexContainingSpecIndex(self.currentSpectrumIndex)
        self.centerOnSpecIndex(self.currentSpectrumIndex)
        self.viewparent.centerOnRamanIndex(self.currentSpectrumIndex)
        self.viewparent.highLightContour(self.currentParticleIndex)
        self.updateSpecPlot()
    
    def centerOnSpecIndex(self, index):
        self.viewparent.centerOnRamanIndex(index)
    
    def darkenBackground(self):
        self.viewparent.darkenPixmap = self.darkenAct.isChecked()
        
@@ -639,7 +608,7 @@ class ParticleAnalysis(QtWidgets.QMainWindow):
            scanIndicator.update()
    
    def exportToExcel(self):
        expWin = ExpExcelDialog(self.dataset, self.particleContainer)
        expWin = ExpExcelDialog(self.dataset)
        expWin.exec()
            
    def exportToSQL(self):
+25 −54
Original line number Diff line number Diff line
@@ -19,27 +19,21 @@ along with this program, see COPYING.
If not, see <https://www.gnu.org/licenses/>.
"""

from PyQt5 import QtWidgets, QtGui, QtCore
from PyQt5 import QtWidgets
import numpy as np
import pandas as pd
import os
import sys

from matplotlib.backends.backend_qt5agg import FigureCanvasQTAgg as FigureCanvas
from matplotlib.figure import Figure


class ExpExcelDialog(QtWidgets.QDialog):
    def __init__(self, dataset, particleContainer):
    def __init__(self, dataset):
        super(ExpExcelDialog, self).__init__()
        self.setWindowTitle('Export Options')
        self.setGeometry(200, 200, 300, 300)
        
        self.dataset = dataset
        self.particleContainer = particleContainer
        self.polymers = self.particleContainer.getListOfParticleAssignments
#        self.additives = self.datastats.currentAdditives
        self.hqis = self.particleContainer.getListOfHighestHQIs
        self.particleContainer = dataset.particleContainer
        
        
        self.layout = QtWidgets.QHBoxLayout()
        self.setLayout(self.layout)
@@ -48,7 +42,7 @@ class ExpExcelDialog(QtWidgets.QDialog):
        excelvbox.addWidget(QtWidgets.QLabel('Select Parameters for Export'))
        excelgroup = QtWidgets.QGroupBox("Export to Excel", self)
        
        self.exportOptions = ['Polymer Type (mandatory)', 'Additives', 'Long Size (µm)', 'Short Size (µm)', 'Area (µm²)', 'HQI', 'Size Classes']
        self.exportOptions = ['Polymer Type (mandatory)', 'Long Size (µm)', 'Short Size (µm)', 'Area (µm²)', 'HQI', 'Size Classes']
        self.checkBoxes = []
        self.sizeClasses = [5, 10, 20, 50, 100, 1e6]
        self.directory = self.dataset.path
@@ -61,11 +55,6 @@ class ExpExcelDialog(QtWidgets.QDialog):
            if option == 'Polymer Type (mandatory)':
                self.checkBoxes[-1].setEnabled(False)           #is mandatory!!!
                    
#            if option == 'Additives':
#                if self.additives is None:
#                    self.checkBoxes[-1].setEnabled(False)
#                    self.checkBoxes[-1].setChecked(False)
                    
            excelvbox.addWidget(self.checkBoxes[-1])
        
        self.xlsFileName = QtWidgets.QLineEdit()
@@ -86,18 +75,23 @@ class ExpExcelDialog(QtWidgets.QDialog):
    
    def toExcel(self):
        requiredcolumns = []       
        self.sizes = self.particleContainer.getSizesOfAllParticles()
        uniquePolymers = self.particleContainer.getUniquePolymers()
        polymers = self.particleContainer.getListOfParticleAssignments()
        sizes = self.particleContainer.getSizesOfAllParticles()
        

        for box in self.checkBoxes:
            if box.isChecked() == True:
                if box.text() != 'Size Classes':
                    requiredcolumns.append(box.text())
                    if box.text() == 'Long Size (µm)':
                        longSize = self.sizes
                        longSizes = sizes
                    elif box.text() == 'Short Size (µm)':
                        self.shortSizes = self.particleContainer.getShortSizesOfAllParticles()
                        shortSizes = self.particleContainer.getShortSizesOfAllParticles()
                    elif box.text() == 'HQI':
                        hqis = self.particleContainer.getListOfHighestHQIs()
                    elif box.text() == 'Area (µm²)':
                        area = np.array([np.round(float(entry[4]), 1) for entry in self.particles])
                        areas = self.particleContainer.getAreasOfAllParticles()
                    
                else:
                    requiredcolumns.append('0 - 5 µm')
@@ -107,28 +101,26 @@ class ExpExcelDialog(QtWidgets.QDialog):
                    requiredcolumns.append('50 - 100 µm')
                    requiredcolumns.append('> 100 µm')
        
        finalData = np.zeros((self.polymers.shape[0],len(requiredcolumns)-1))
        polymertypes = [""]*self.polymers.shape[0]
        finalData = np.zeros((polymers.shape[0],len(requiredcolumns)-1))
        polymertypes = [""]*polymers.shape[0]
        rowindex = 0
        for polymer in np.unique(self.polymers):
            indices = self.polymers == polymer
        for polymer in uniquePolymers:
            indices = self.particleContainer.getgetIndicesOfParticleType(polymer)
            numentries = int(np.sum(indices))
            print("Num:", numentries)
            sys.stdout.flush()
            
            for colindex, column in enumerate(requiredcolumns):
                if column == 'Polymer Type (mandatory)':
                    polymertypes[rowindex:rowindex+numentries] = self.polymers[indices]    
#                if column == 'Additives':
#                    finalData[rowindex:rowindex+numentries, colindex-1] = self.additives[indices]                
                    polymertypes[rowindex:rowindex+numentries] = polymers[indices]              
                if column == 'Long Size (µm)':
                    finalData[rowindex:rowindex+numentries, colindex-1] = longSize[indices]
                    finalData[rowindex:rowindex+numentries, colindex-1] = longSizes[indices]
                if column == 'Short Size (µm)':
                    finalData[rowindex:rowindex+numentries, colindex-1] = self.shortSizes[indices]
                    finalData[rowindex:rowindex+numentries, colindex-1] = shortSizes[indices]
                if column == 'Area (µm²)':
                    finalData[rowindex:rowindex+numentries, colindex-1] = area[indices]
                    finalData[rowindex:rowindex+numentries, colindex-1] = areas[indices]
                if column == 'HQI':
                    finalData[rowindex:rowindex+numentries, colindex-1] = self.hqis[indices]
                    finalData[rowindex:rowindex+numentries, colindex-1] = hqis[indices]
            
            if '> 100 µm' in requiredcolumns:
                ##append size classes
@@ -184,24 +176,3 @@ class ExpExcelDialog(QtWidgets.QDialog):
            report.to_excel(writer, sheet_name = 'Particle Statistics', index=False)
        writer.save()
        self.accept()
 No newline at end of file


class AdditiveViewer(QtWidgets.QWidget):
    def __init__(self, polymername, sortedAdditives):
        super(AdditiveViewer, self).__init__()
        self.setGeometry(200,200, 800, 600)
        self.setWindowTitle('Additives of {}'.format(polymername))
        
        self.layout = QtWidgets.QGridLayout()
        self.setLayout(self.layout)
        
        self.canvas = FigureCanvas(Figure(figsize=(5, 3)))
        self.ax = self.canvas.figure.subplots()
        
        self.layout.addWidget(self.canvas, 0, 0)
        
        self.ax.hist(sortedAdditives)
        self.ax.set_ylabel('Number', fontsize = 15)
        self.ax.tick_params(axis='both', which='both', labelsize=15)

        
 No newline at end of file
+5 −2
Original line number Diff line number Diff line
@@ -98,6 +98,9 @@ class Particle(object):
    def getNumberOfMeasurements(self):
        return len(self.measurements)
    
    def getArea(self):
        return np.round(self.area)
    
    def measurementsHaveSameOrigAssignment(self):
        allResults = [meas.getOrigAssignment() for meas in self.measurements]
        if len(np.unique(allResults)) == 1:
@@ -126,7 +129,7 @@ class Measurement(object):
        
        self.assignment_orig = 'Not Evaluated'
        self.assignment_afterHQI = None
        self.hqi = None
        self.hqi = 0
        
        self.assignedParticle = None
    
Loading