def __init__(self,
                 calculation_parameters=ProjectionCalculationParameters()):
        super(CalculateProjectionSeries_popup, self).__init__()
        self.calculationParameters = calculation_parameters

        self.ui = CalculateProjectionSeries_Dialog.Ui_CalculateProjectionSeries_Dialog(
        )
        self.ui.setupUi(self)
        self.setModal(True)

        import os
        from functools import partial
        self.calculationParameters.outputFilename = os.path.abspath(
            os.getcwd() + '/projections.mrc')
        self.ui.lineEdit_outputFilename.setText(
            self.calculationParameters.outputFilename)
        self.ui.lineEdit_phi.setText(
            toQString(str(self.calculationParameters.phi)))
        self.ui.lineEdit_psi.setText(
            toQString(str(self.calculationParameters.psi)))
        self.ui.lineEdit_thetaStart.setText(
            toQString(str(self.calculationParameters.thetaStart)))
        self.ui.lineEdit_thetaStep.setText(
            toQString(str(self.calculationParameters.thetaStep)))
        self.ui.lineEdit_thetaStop.setText(
            toQString(str(self.calculationParameters.thetaStop)))
        self.ui.lineEdit_angleFile.textEdited.connect(
            self.setAngleFilename_fromLineEdit)
        self.ui.btn_selectAngleFile.clicked.connect(self.selectAngleFile)
        self.ui.lineEdit_phi.textEdited.connect(self.setPhi)
        self.ui.lineEdit_psi.textEdited.connect(self.setPsi)
        self.ui.lineEdit_thetaStart.textEdited.connect(self.setThetaStart)
        self.ui.lineEdit_thetaStep.textEdited.connect(self.setThetaStep)
        self.ui.lineEdit_thetaStop.textEdited.connect(self.setThetaStop)

        self.ui.lineEdit_outputFilename.textEdited.connect(
            self.setOutputFilename)
        self.ui.checkBox_saveAngles.setChecked(True)
        self.ui.checkBox_saveAngles.toggled.connect(self.toggleSaveAngles)
        self.ui.buttonBox.button(
            QtWidgets.QDialogButtonBox.Ok).setText("Calculate Projections")
        self.ui.buttonBox.accepted.connect(partial(self.setStatus, 1))

        # validations
        self.ui.lineEdit_phi.editingFinished.connect(
            partial(self.validateFloatFromLineEdit, self.ui.lineEdit_phi))
        self.ui.lineEdit_psi.editingFinished.connect(
            partial(self.validateFloatFromLineEdit, self.ui.lineEdit_psi))
        self.ui.lineEdit_thetaStart.editingFinished.connect(
            partial(self.validateFloatFromLineEdit,
                    self.ui.lineEdit_thetaStart))
        self.ui.lineEdit_thetaStep.editingFinished.connect(
            partial(self.validateFloatFromLineEdit,
                    self.ui.lineEdit_thetaStep))
        self.ui.lineEdit_thetaStop.editingFinished.connect(
            partial(self.validateFloatFromLineEdit,
                    self.ui.lineEdit_thetaStop))

        self.status = 0
 def setAngleFilename_fromLineEdit(self):
     filename = self.ui.lineEdit_angleFile.text()
     if os.path.isfile(toString(filename)):
         self.calculationParameters.angleFilename = filename
         self.calculationParameters.angleFileProvided = True
         self.ui.lineEdit_angleFile.setText(toQString(filename))
         self.disableAngleWidgets()
Example #3
0
 def selectAngleFile(self):
     filename, _ = QtWidgets.QFileDialog.getOpenFileName(
         QtWidgets.QFileDialog(),
         "Select File Containing Support",
         filter=
         "Euler Angles (*.txt *.mat);; MATLAB files (*.mat);;text files (*.txt);;All Files (*)"
     )
     if filename:
         self.GENFIRE_ReconstructionParameters.setAngleFilename(filename)
         self.ui.lineEdit_angle.setText(toQString(filename))
Example #4
0
    def updateFilenames(self):
        import os
        base, file = os.path.split(
            toString(self.GENFIRE_ProjectionCalculator.calculationParameters.
                     outputFilename))

        self.ui.lineEdit_angle.setText(
            toQString(
                str(self.GENFIRE_ProjectionCalculator.calculationParameters.
                    outputAngleFilename)))
        self.ui.lineEdit_angle.textChanged.emit(self.ui.lineEdit_angle.text())
        self.ui.lineEdit_pj.setText(
            toQString(
                str(self.GENFIRE_ProjectionCalculator.calculationParameters.
                    outputFilename)))
        self.ui.lineEdit_pj.textChanged.emit(self.ui.lineEdit_pj.text())
        self.ui.lineEdit_results.setText(toQString(str(base + "/results.mrc")))
        self.ui.lineEdit_results.textChanged.emit(
            self.ui.lineEdit_results.text())
 def selectAngleFile(self):
     filename, _ = QtWidgets.QFileDialog.getOpenFileName(
         QtWidgets.QFileDialog(),
         "Select File Containing Angles",
         filter="txt files (*.txt);;All Files (*)")
     if filename:
         self.calculationParameters.angleFilename = filename
         self.calculationParameters.angleFileProvided = True
         self.ui.lineEdit_angleFile.setText(toQString(filename))
         self.disableAngleWidgets()
Example #6
0
 def selectInitialObjectFile(self):
     filename, _ = QtWidgets.QFileDialog.getOpenFileName(
         QtWidgets.QFileDialog(),
         "Select File Containing Initial Object",
         filter=
         "Volume Files (*.mrc *.mat *.npy);; MATLAB files (*.mat);;MRC (*.mrc);;All Files (*)"
     )
     if filename:
         self.GENFIRE_ReconstructionParameters.setInitialObjectFilename(
             filename)
         self.ui.lineEdit_io.setText(toQString(filename))
Example #7
0
 def selectSupportFile(self):
     filename, _ = QtWidgets.QFileDialog.getOpenFileName(
         QtWidgets.QFileDialog(),
         "Select File Containing Support",
         filter=
         "Volume Files (*.mrc *.mat *.npy);; MATLAB files (*.mat);;MRC (*.mrc);;All Files (*)"
     )
     if filename:
         self.GENFIRE_ReconstructionParameters.setSupportFilename(filename)
         self.ui.lineEdit_support.setText(toQString(filename))
         self.ui.checkBox_default_support.setChecked(False)
 def __init__(self):
     self.modelFilename = toQString('')
     self.angleFilename = toQString('')
     self.outputFilename = toQString('')
     self.outputAngleFilename = toQString('')
     self.outputFilesFlag = False
     self.angleFileProvided = False
     self.modelFilenameProvided = False
     self.modelLoadedFlag = False
     self.writeAnglesFlag = True
     self.interpolator = None
     self.model = None
     self.ncOut = None
     self.phi = 0.0
     self.theta = 0.0
     self.thetaStart = 0.0
     self.thetaStep = 3.0
     self.thetaStop = 180.0
     self.psi = 0.0
     self.calculationMethod = "FFT"
Example #9
0
    def selectProjectionFile(self):
        filename, _ = QtWidgets.QFileDialog.getOpenFileName(
            QtWidgets.QFileDialog(),
            "Select File Containing Projections",
            filter=
            "Projection Stacks (*.mrc *.mat *.tif *.npy);; MATLAB files (*.mat);;TIFF images (*.tif *.tiff);;MRC (*.mrc);;All Files (*)"
        )

        if filename:
            self.GENFIRE_ReconstructionParameters.setProjectionFilename(
                filename)
            self.ui.lineEdit_pj.setText(toQString(filename))
Example #10
0
 def setTextFromSlider(self, lineedit, value):
     lineedit.setText(toQString(value))
Example #11
0
    def __init__(self):

        ## Superclass constructor
        super(GenfireMainWindow, self).__init__()

        ## Initialize UI
        self.ui = GENFIRE_MainWindow.Ui_GENFIRE_MainWindow()
        self.ui.setupUi(self)

        ## Initialize Reconstruction Parameters
        self.GENFIRE_ReconstructionParameters = ReconstructionParameters()

        ## Initialize file paths in text boxes
        self.ui.lineEdit_results.setText(
            toQString(os.path.join(os.getcwd(), 'results.mrc')))

        self.ui.lineEdit_support.setText(toQString(os.getcwd()))

        self.ui.lineEdit_pj.setText(toQString(os.getcwd()))

        self.ui.lineEdit_io.setText(toQString(os.getcwd()))

        self.ui.lineEdit_angle.setText(toQString(os.getcwd()))

        ## Push Buttons -- connect each to their main function and check if the reconstruction parameters are good each
        ## time a parameter is changed
        self.ui.btn_projections.clicked.connect(self.selectProjectionFile)
        self.ui.btn_projections.clicked.connect(self.checkParameters)

        self.ui.btn_angles.clicked.connect(self.selectAngleFile)
        self.ui.btn_angles.clicked.connect(self.checkParameters)

        self.ui.btn_support.clicked.connect(self.selectSupportFile)
        self.ui.btn_support.clicked.connect(self.checkParameters)

        self.ui.btn_io.clicked.connect(self.selectInitialObjectFile)
        self.ui.btn_io.clicked.connect(self.checkParameters)

        self.ui.btn_reconstruct.setEnabled(False)
        self.ui.btn_reconstruct.clicked.connect(self.startReconstruction)
        self.ui.btn_reconstruct.clicked.connect(self.checkParameters)
        self.ui.btn_reconstruct.setStyleSheet("background-color: rgb(221,0,0)")

        self.ui.btn_displayResults.clicked.connect(self.displayResults)

        ## Line Edits -- connect each to their main function and check if the reconstruction parameters are good each
        ## time a parameter is changed
        self.ui.lineEdit_pj.textChanged.connect(
            self.GENFIRE_ReconstructionParameters.setProjectionFilename)
        self.ui.lineEdit_pj.textChanged.connect(self.checkParameters)

        self.ui.lineEdit_angle.textChanged.connect(
            self.GENFIRE_ReconstructionParameters.setAngleFilename)
        self.ui.lineEdit_angle.textChanged.connect(self.checkParameters)

        self.ui.lineEdit_support.textChanged.connect(
            self.GENFIRE_ReconstructionParameters.setSupportFilename)
        self.ui.lineEdit_support.textChanged.connect(self.checkParameters)

        self.ui.lineEdit_io.textChanged.connect(
            self.GENFIRE_ReconstructionParameters.setInitialObjectFilename)
        self.ui.lineEdit_io.textChanged.connect(self.checkParameters)

        self.ui.lineEdit_results.textChanged.connect(
            self.GENFIRE_ReconstructionParameters.setResultsFilename)
        self.ui.lineEdit_results.textChanged.connect(self.checkParameters)

        self.ui.lineEdit_numIterations.setText(toQString("100"))
        self.ui.lineEdit_numIterations.textChanged.connect(
            self.safeSetNumIterations)
        self.ui.lineEdit_numIterations.textChanged.connect(
            self.checkParameters)

        self.ui.lineEdit_oversamplingRatio.setText(toQString("3"))
        self.ui.lineEdit_oversamplingRatio.textChanged.connect(
            self.safeSetOversamplingRatio)
        self.ui.lineEdit_oversamplingRatio.textChanged.connect(
            self.checkParameters)

        self.ui.lineEdit_interpolationCutoffDistance.setText(toQString("0.7"))
        self.ui.lineEdit_interpolationCutoffDistance.textChanged.connect(
            self.safeSetInterpDistance)
        self.ui.lineEdit_interpolationCutoffDistance.textChanged.connect(
            self.checkParameters)

        self.ui.lineEdit_io.setDisabled(True)
        self.ui.lineEdit_io.setStyleSheet("background-color: gray")

        ## Radio Buttons -- default is resolution extension suppression
        self.ui.radioButton_on.setChecked(True)
        self.ui.radioButton_on.toggled.connect(
            self.selectResolutionExtensionSuppressionState)

        self.ui.radioButton_off.toggled.connect(
            self.selectResolutionExtensionSuppressionState)

        self.ui.radioButton_extension.toggled.connect(
            self.selectResolutionExtensionSuppressionState)

        self.ui.radioButton_FFT.setChecked(True)
        self.ui.radioButton_DFT.toggled.connect(self.setGriddingMethod)
        self.ui.radioButton_FFT.toggled.connect(self.setGriddingMethod)

        ## Check Boxes
        self.ui.checkBox_rfree.setChecked(True)
        self.ui.checkBox_rfree.toggled.connect(self.calculateRfree)

        self.ui.checkBox_provide_io.toggled.connect(self.toggleSelectIO)

        self.ui.checkBox_default_support.toggled.connect(
            self.toggleUseDefaultSupport)
        self.ui.checkBox_default_support.setChecked(True)

        self.ui.checkBox_support_constraint.setChecked(True)
        self.ui.checkBox_positivity_constraint.setChecked(True)
        self.ui.checkBox_support_constraint.toggled.connect(
            self.toggleSupportConstraint)
        self.ui.checkBox_positivity_constraint.toggled.connect(
            self.togglePositivityConstraint)
        self.ui.checkBox_multiGridding.toggled.connect(
            self.toggleMultiGridding)
        self.ui.checkBox_resCircle.toggled.connect(self.toggleResCircle)

        self.ui.action_Create_Support.triggered.connect(
            self.launchProjectionCalculator)

        self.ui.action_Volume_Slicer.triggered.connect(self.launchVolumeSlicer)
    def __init__(self, parent=None):
        super(ProjectionCalculator, self).__init__()
        self.ui = ProjectionCalculator_MainWindow.Ui_ProjectionCalculator()
        self.ui.setupUi(self)  # buid the interface
        self.parent = parent
        self.calculationParameters = ProjectionCalculationParameters()

        self.ui.lineEdit_modelFile.setText(toQString(os.getcwd()))
        self.ui.lineEdit_modelFile.editingFinished.connect(
            self.setModelFilename_fromLineEdit)

        ## Push Buttons
        self.ui.btn_selectModel.clicked.connect(self.selectModelFile)

        ## Sliders
        self.ui.verticalSlider_phi.setValue(0)
        self.ui.verticalSlider_phi.setMinimum(0)
        self.ui.verticalSlider_phi.setMaximum(3600)
        self.ui.verticalSlider_phi.valueChanged.connect(
            self.setPhiLineEditValue)

        self.ui.verticalSlider_theta.setValue(0)
        self.ui.verticalSlider_theta.setMinimum(0)
        self.ui.verticalSlider_theta.setMaximum(3600)
        self.ui.verticalSlider_theta.valueChanged.connect(
            self.setThetaLineEditValue)

        self.ui.verticalSlider_psi.setValue(0)
        self.ui.verticalSlider_psi.setMinimum(0)
        self.ui.verticalSlider_psi.setMaximum(3600)
        self.ui.verticalSlider_psi.valueChanged.connect(
            self.setPsiLineEditValue)

        ## Line edits
        self.ui.lineEdit_phi.setText(toQString('0'))
        self.ui.lineEdit_theta.setText(toQString('0'))
        self.ui.lineEdit_psi.setText(toQString('0'))
        self.ui.lineEdit_phi.editingFinished.connect(self.setPhiSliderValue)
        self.ui.lineEdit_theta.editingFinished.connect(
            self.setThetaSliderValue)
        self.ui.lineEdit_psi.editingFinished.connect(self.setPsiSliderValue)

        self.calculateProjections_Dialog = CalculateProjectionSeries_popup(
            self.calculationParameters)
        self.ui.btn_go.clicked.connect(self.showDialog)
        self.calculateProjections_Dialog.ui.buttonBox.accepted.connect(
            self.readyToCalculateProjections)
        self.ui.btn_go.setEnabled(False)

        # Create figures for embedded plotting
        self.figure = plt.figure(3)
        self.figure.clf(
        )  # clear figure in case it was rendered somewhere else previously
        self.canvas = FigureCanvas(self.figure)
        self.navigationToolbar = NavigationToolbar(self.canvas, self)
        self.ui.verticalLayout_figure.addWidget(self.navigationToolbar)
        self.ui.verticalLayout_figure.addWidget(self.canvas)
        self.ax = self.figure.add_subplot(111)
        self.ax.axes.get_xaxis().set_visible(False)
        self.ax.axes.get_yaxis().set_visible(False)

        self.ui.btn_clearModel.clicked.connect(self.clearModel)
 def setModelFilename(self, filename):
     self.calculationParameters.modelFilename = filename
     self.ui.lineEdit_modelFile.setText(toQString(filename))
     self.loadModel(filename)
     self.displayFigure()
 def setPsiLineEditValue(self, value):
     self.ui.lineEdit_psi.setText(toQString(float(value) / 10))
     self.calculationParameters.psi = float(value) / 10
     self.updateFigure()
 def setThetaLineEditValue(self, value):
     self.ui.lineEdit_theta.setText(toQString(float(value) / 10))
     self.calculationParameters.theta = float(value) / 10
     self.updateFigure()