コード例 #1
0
ファイル: RereadDialog.py プロジェクト: kendall-s/HyPro2_py
    def rereaddata(self):

        filetype = self.analysistype.currentText()

        if self.itemselectedboolean == 1:
            selectedfile = str(self.datafiles.currentItem().text())

            if filetype == 'CTD':
                self.initctd = InitialiseCTDData.initCTDdata(selectedfile, self.db, self.currpath, self.currproject,
                                                             self.interactive, True)

            if filetype == 'Nutrients':
                self.initnutrientdata = processingNutrientsWindow(selectedfile, self.db, self.currpath,
                                                                  self.currproject, self.interactive, True)

            if filetype == 'Salinity':
                self.initsaltdata = processingSalinityWindow(selectedfile, self.db, self.currpath, self.currproject,
                                                             self.interactive, True)

            if filetype == 'Oxygen':
                self.initoxydata = processingOxygenWindow(selectedfile, self.db, self.currpath, self.currproject,
                                                          self.interactive, True)

            if filetype == 'Sampling':
                self.initsampledata = InitialiseSampleSheet.initSampleSheet(selectedfile, self.currproject, self.db,
                                                                            self.currpath, self.interactive, True)

        else:
            messagebox = hyproMessageBoxTemplate('Error',
                                                 'Please select a file to reread...         ',
                                                 'information')
コード例 #2
0
ファイル: MainMenu.py プロジェクト: kendall-s/HyPro2_py
    def open_processing(self):
        try:
            if self.currproject == 'No active project':
                message_box = hyproMessageBoxTemplate(
                    'Error',
                    'There is no active project currently selected, please create or import one.',
                    'information')
            else:
                self.project = self.currprojectdisp.text()
                with open('C:/HyPro/hyprosettings.json', 'r') as file:
                    params = json.loads(file.read())

                path = params['projects'][self.project]['path']
                self.proccing = Processingmenu(self.project, path)
                self.proccing.show()
                sleep(0.3)
                self.hide()

                self.proccing.backToMain.connect(self.show)
                #self.proccing.backToMain.connect(self.proccing.output_box.close)
                self.proccing.backToMain.connect(
                    lambda: self.proccing.output_box.widget.close())
                self.proccing.backToMain.connect(lambda: logging.shutdown())
                self.proccing.backToMain.connect(self.proccing.hide)

        except Exception as e:
            print(e)
コード例 #3
0
ファイル: ProcessingMenu.py プロジェクト: kendall-s/HyPro2_py
 def save_output_window(self):
     filedialog = QFileDialog.getSaveFileName(self, 'Save File', '', '.txt')
     if filedialog[0]:
         outputfile = open(filedialog[0] + filedialog[1], 'w')
         outputtext = self.output_box.gettext()
         outputfile.write(outputtext)
         outputfile.close()
         message_box = hyproMessageBoxTemplate(
             'Saving Success', 'Output log was successfully saved.',
             'success')
コード例 #4
0
ファイル: SurveyDialog.py プロジェクト: kendall-s/HyPro2_py
    def savefunction(self):
        try:
            surveyname = str(self.surveyName.text())
            with open(self.currpath + '/' + '%sParams.json' % self.currproject,
                      'r') as file:
                params = json.loads(file.read())

            newsurvey = {'%s' % surveyname: {}}
            if self.nuts_active:
                newsurvey[surveyname]['seal'] = {
                    'activated': self.activate_nutrient.isChecked(),
                    'ctdsurvey': self.ctd_survey_nutrient.isChecked(),
                    'usesampleid': self.sample_id_nutrient.isChecked(),
                    'surveyprefix': self.survey_prefix_nutrient.text(),
                    'decodedepfromid':
                    self.decode_deployment_nutrient.isChecked(),
                    'depformat': self.dep_rp_format_nutrient.text(),
                    'decodesampleid': self.decode_nutrient.isChecked()
                }
            if self.salt_active:
                newsurvey[surveyname]['guildline'] = {
                    'activated': self.activate_salt.isChecked(),
                    'ctdsurvey': self.ctd_survey_salt.isChecked(),
                    'decodesampleid': self.decode_salt.isChecked(),
                    'surveyprefix': self.survey_number_station.text(),
                    'decodedepfromid': self.decode_salt_deployment.isChecked(),
                    'usesampleid': self.sample_salt_id.isChecked(),
                    'depformat': self.dep_rp_format_salt.text()
                }
            if self.oxy_active:
                newsurvey[surveyname]['scripps'] = {
                    'activated': self.activate_oxygen.isChecked(),
                    'ctdsurvey': self.ctd_survey_oxygen.isChecked(),
                    'decodesampleid': self.decode_oxygen.isChecked(),
                    'surveyprefix': self.survey_number_station.text(),
                    'decodedepfromid':
                    self.decode_oxygen_deployment.isChecked(),
                    'usesampleid': self.sample_oxygen_id.isChecked()
                }

            params['surveyparams'].update(newsurvey)

            with open(self.currpath + '/' + '%sParams.json' % self.currproject,
                      'w') as file:
                json.dump(params, file)

            message_box = hyproMessageBoxTemplate(
                'Settings Saved', 'Survey settings were successfully saved',
                'success')

        except Exception as e:
            print('Error: ' + e)
コード例 #5
0
    def createProj(self):
        try:
            self.project_directorystr = str(self.project_directory.text())
            self.project_prefix_str = str(self.project_prefix.text())
            self.project_type_str = str(self.project_type.currentText())

            if (self.project_directorystr != '') & (self.project_prefix_str != ''):

                if os.path.exists(self.project_directory.text()):

                    project_directorystr = str(self.project_directory.text())

                    with open('C:/HyPro/hyprosettings.json', 'r') as f:
                        self.params = json.load(f)

                    continuecreateproj = True
                    for x in self.params['projects'].keys():
                        if self.project_prefix_str == x:
                            messagebox = hyproMessageBoxTemplate('Error',
                                                                 'There is already a project with that name, please '
                                                                 'choose a different name for the project.', 'error')
                            continuecreateproj = False

                    if continuecreateproj:

                        newproj = {'%s' % self.project_prefix_str: {'path': project_directorystr, 'type': self.project_type_str}}

                        self.params['projects'].update(newproj)

                        #self.params['activeproject'] = project_prefixstr

                        # Write project info back to disk
                        with open('C:/HyPro/hyprosettings.json', 'w') as file:
                            json.dump(self.params, file)

                        # Create directories for the project
                        if not os.path.exists((project_directorystr + "/Nutrients")):
                            os.makedirs((project_directorystr + "/Nutrients"))
                        if not os.path.exists((project_directorystr + "/Salinity")):
                            os.makedirs((project_directorystr + "/Salinity"))
                        if not os.path.exists((project_directorystr + "/Oxygen")):
                            os.makedirs((project_directorystr + "/Oxygen"))
                        if not os.path.exists((project_directorystr + "/CTD")):
                            os.makedirs((project_directorystr + "/CTD"))
                        if not os.path.exists((project_directorystr + "/Sampling")):
                            os.makedirs((project_directorystr + "/Sampling"))

                        # Make weird little hack 'hypro' file, used for when a project needs to be imported
                        filebuffer = open(project_directorystr + '/' + self.project_prefix_str + '.hypro', 'w')
                        filebuffer.write(self.project_prefix_str + '\n')
                        filebuffer.write(self.project_type_str + '\n')
                        filebuffer.write(project_directorystr + '\n')
                        filebuffer.close()


                        messagebox = hyproMessageBoxTemplate('Success', 'A new project was successfully created.',
                                                             'success')
                        sleep(0.4)
                        self.close()
                        sleep(0.5)
                        self.new_project_created.emit()

                    else:
                        messagebox = hyproMessageBoxTemplate('Error',
                                                             'There is already a project with that name, please choose '
                                                             'a different name for the project.', 'error')
                else:
                    messagebox = hyproMessageBoxTemplate('Error', 'Provided path does not exist', 'error')

            else:
                messagebox = hyproMessageBoxTemplate('Error', 'Fields are empty, please fill them in.', 'information')

        except Exception as e:
            logging.error(traceback.print_exc())
コード例 #6
0
    def delete_data(self):
        try:
            filetype = self.analysis_type.currentText()

            selectedfile = self.data_files.currentItem()

            if selectedfile:

                selectedfile = str(selectedfile.text())

                conn = sqlite3.connect(self.db)
                c = conn.cursor()

                filename = [selectedfile]
                # Different statement for each analysis as the database structure for each is different
                if filetype == 'CTD':
                    deploymentnumber = [selectedfile[-7:-4]]
                    print(deploymentnumber)
                    c.execute('DELETE from ctdData where deployment=?',
                              deploymentnumber)
                    conn.commit()
                    c.execute('DELETE from ctdFilesProcessed where filename=?',
                              filename)
                    conn.commit()
                    conn.close()
                    if self.deletefilescheckbox.isChecked():
                        print('Deleting data files as well')
                        file = self.currpath + '/' + 'CTD' + '/' + selectedfile
                        os.remove(file)
                        logging.info('CTD data - ' + str(selectedfile) +
                                     ' deleted, the file was also deleted')

                    else:
                        logging.info('CTD data - ' + str(selectedfile) +
                                     ' deleted')

                if filetype == 'Nutrients':
                    pass
                    # TODO: complete the section for nutrients

                if filetype == 'Salinity':
                    runnumber = [selectedfile[-8:-5]]
                    c.execute('DELETE from salinityData where runNumber=?',
                              runnumber)
                    conn.commit()
                    c.execute(
                        'DELETE from salinityFilesProcessed where filename=?',
                        filename)
                    conn.commit()
                    conn.close()
                    if self.delete_files_checkbox.isChecked():
                        print('Deleting data files as well')
                        file = self.currpath + '/' + 'Salinity' + '/' + selectedfile
                        os.remove(file)
                        logging.info('Salinity data - ' + str(selectedfile) +
                                     ' deleted, the file was also deleted')
                    else:
                        logging.info('Salinity data - ' + str(selectedfile) +
                                     ' deleted')

                if filetype == 'Oxygen':
                    runnumber = [selectedfile[-7:-4]]
                    c.execute('DELETE from oxygenData where runNumber=?',
                              runnumber)
                    conn.commit()
                    c.execute(
                        'DELETE from oxygenFilesProcessed where filename=?',
                        filename)
                    conn.commit()
                    conn.close()
                    if self.delete_files_checkbox.isChecked():
                        print('Deleting data files as well')
                        file = self.currpath + '/' + 'Oxygen' + '/' + selectedfile
                        os.remove(file)
                        logging.info('Oxygen data - ' + str(selectedfile) +
                                     ' deleted, the file was also deleted')
                    else:
                        logging.info('Oxygen data - ' + str(selectedfile) +
                                     ' deleted')

                if filetype == 'Sampling':
                    runnumber = [selectedfile[-11:-8]]
                    print(runnumber)
                    c.execute('DELETE from logsheetData where deployment=?',
                              runnumber)
                    conn.commit()
                    c.execute(
                        'DELETE from logsheetFilesProcessed where filename=?',
                        filename)
                    conn.commit()
                    conn.close()
                    if self.delete_files_checkbox.isChecked():
                        print('Deleting data files as well')
                        file = self.currpath + '/' + 'Sampling' + '/' + selectedfile
                        os.remove(file)
                        logging.info('Sample logsheet data - ' +
                                     str(selectedfile) +
                                     ' deleted, the file was also deleted')
                    else:
                        logging.info('Sample logsheet data - ' +
                                     str(selectedfile) + ' deleted')

                messagebox = hyproMessageBoxTemplate(
                    'Deleted successfully',
                    'Data was deleted from the database file', 'delete')

            else:
                messagebox = hyproMessageBoxTemplate(
                    'Error', 'Please select a file to delete             ',
                    'error')

        except Exception:
            logging.error(traceback.print_exc())
コード例 #7
0
ファイル: ProcessingMenu.py プロジェクト: kendall-s/HyPro2_py
 def about_information(self):
     message_box = hyproMessageBoxTemplate(
         'About Hypro',
         'This is an experimental version of HyPro built using Python.',
         'about')
コード例 #8
0
    def call_plot(self, sample_ids, deployments, rosette_positions, salinity):

        # Pull out relevant CTD data based on the samples that were analysed
        deps_set = tuple(set(sample_ids))
        queryq = '?'
        queryplace = ', '.join(queryq for unused in deps_set)

        conn = sqlite3.connect(self.database)
        c = conn.cursor()
        q = 'SELECT * FROM ctdData WHERE deployment IN (%s)' % queryplace
        c.execute(q, deps_set)
        conn.commit()
        ctd_data = list(c.fetchall())
        conn.close()
        if not ctd_data:
            logging.info(
                f'<b>The salinity file {self.file} contains CTD samples - however there is no CTD sensor data in HyPro. The file'
                ' is processed but no error plot appears because of this error. Once CTD data is imported, '
                'reprocess this file to see the error plot. </b>')
            time.sleep(0.3)
            message_box = hyproMessageBoxTemplate('HyPro - Oxygen Processing Anomaly',
                                                  f'CTD data matching results in the file {self.file} are not in HyPro.',
                                                  'information',
                                                  long_text=f'The salinity file {self.file} contains CTD samples, '
                                                            f'however there is no matching CTD sensor data in HyPro. '
                                                            f'The file is processed but no error plot appears because '
                                                            f'of this error. Once CTD data is imported, reprocess '
                                                            f'this file to see the error plot.')
            time.sleep(0.2)
            self.proceed_processing()

        else:
            ctd_salt1 = [x[8] for x in ctd_data]
            ctd_salt2 = [x[9] for x in ctd_data]
            ctd_deployment = [x[0] for x in ctd_data]
            ctd_rp = [x[11] for x in ctd_data]
            ctd_depths = [x[7] for x in ctd_data]

            ctd_data_to_plot = {'primary_sal': [], 'secondary_sal': [], 'dep_rosette_postion': [],
                                'rosette_position_to_plot': [], 'deployment': [], 'depths': [], 'bottle_sal': []}

            reference_indexes = []
            for i, bottle_dep in enumerate(deployments):
                for l, ctd_dep in enumerate(ctd_deployment):
                    if bottle_dep == ctd_dep:
                        if rosette_positions[i] == ctd_rp[l]:
                            reference_indexes.append(i)
                            ctd_data_to_plot['bottle_sal'].append(salinity[i])
                            ctd_data_to_plot['deployment'].append(bottle_dep)
                            ctd_data_to_plot['depths'].append(ctd_depths[l])
                            ctd_data_to_plot['rosette_position_to_plot'].append(rosette_positions[i])
                            ctd_data_to_plot['primary_sal'].append(ctd_salt1[l])
                            ctd_data_to_plot['secondary_sal'].append(ctd_salt2[l])

            if max(ctd_data_to_plot['rosette_position_to_plot']) > 24:
                max_rp = 36
            else:
                max_rp = 24

            # Create the X data for the plot - x data is calculated as RP times Deployment, meaning x data will
            # go up continually from 1. i.e. deployment 2 RP 5 will equal x data of 41
            ctd_data_to_plot['dep_rosette_position'] = [(((x - 1) * max_rp) + ctd_data_to_plot['rosette_position_to_plot'][i])
                                                        for i, x in enumerate(ctd_data_to_plot['deployment'])]

            time.sleep(0.2)
            self.salinity_error_plot = salinityDifferencesPlot(ctd_data_to_plot['deployment'],
                                                               ctd_data_to_plot['dep_rosette_position'],
                                                               ctd_data_to_plot['bottle_sal'],
                                                               ctd_data_to_plot['primary_sal'],
                                                               ctd_data_to_plot['secondary_sal'],
                                                               ctd_data_to_plot['depths'],
                                                               max_rp,
                                                               reference_indexes,
                                                               self.salinity_data)

            self.salinity_error_plot.proceed.clicked.connect(self.proceed_processing)