Skip to content

Commit

Permalink
v1.4
Browse files Browse the repository at this point in the history
* Added .xlsx support
* Updated README
  • Loading branch information
albano-a committed Apr 12, 2024
1 parent 344cf40 commit 9b1dd58
Show file tree
Hide file tree
Showing 15 changed files with 193 additions and 107 deletions.
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
@@ -0,0 +1,2 @@

*.pyc
56 changes: 37 additions & 19 deletions Onix.py
Original file line number Diff line number Diff line change
Expand Up @@ -15,13 +15,9 @@
import os
import sys
import shutil
from openpyxl import Workbook
from qt_material import apply_stylesheet

# TODO: Adicionar a opção de importar arquivos .xlsx
# TODO: Adicionar a opção de exportar o gráfico e os dados do TOMI Index
# TODO: Adicionar opção de modelo de interpolação
# TODO: Importar o dado de xlsx e ser possível escolher a página da planilha

# plt.style.use(['ggplot'])

class MainProgramWindow(QMainWindow, Ui_MainWindow):
Expand All @@ -40,6 +36,13 @@ def __init__(self):
self.plotLayout.setSpacing(0) # Remove spacing
# Add the FigureCanvasQTAgg object to the layout
self.plotLayout.addWidget(self.canvas)

# Hiding the excel sheet options
self.xlsxFileRadioButton.toggled.connect(self.show_xlsx_options)
# Initializing the state
self.sheetTabLabel.hide()
self.sheetPageInput.hide()


# Set the layout of the parent widget
self.matplotlib_toolbar = NavigationToolbar2QT(self.canvas)
Expand Down Expand Up @@ -119,6 +122,14 @@ def import_file(self):
def redraw_plot(self):
self.plot_tomi_index()

def show_xlsx_options(self):
if self.xlsxFileRadioButton.isChecked():
self.sheetTabLabel.show()
self.sheetPageInput.show()
else:
self.sheetTabLabel.hide()
self.sheetPageInput.hide()

def read_file(self):
dataframe = pd.DataFrame()

Expand All @@ -134,34 +145,39 @@ def read_file(self):
try:
dataframe = pd.read_csv(f'uploads/{self.selected_file}',
skiprows=0,
delimiter=';',
usecols=(0,1,2,3,4,5,6))
delimiter=';')
return dataframe
except Exception as e:
QMessageBox.critical(self, "Error", f"Um erro ocorreu: {e}")
return pd.DataFrame()

elif self.file_type_button_text == '.txt':
try:
dataframe = pd.read_csv(f'uploads/{self.selected_file}',
dataframe = pd.read_txt(f'uploads/{self.selected_file}',
skiprows=0,
delimiter=';',
usecols=(0,1,2,3,4,5,6))
delimiter=';')
return dataframe
except Exception as e:
QMessageBox.critical(self, "Error", f"Um erro ocorreu: {e}")
return pd.DataFrame()

elif self.file_type_button_text == '.xlsx':
pass

sheetTab = self.sheetPageInput.text()
try:
dataframe = pd.read_excel(f'uploads/{self.selected_file}',
skiprows=0,
decimal=',',
sheet_name=sheetTab)
return dataframe
except Exception as e:
QMessageBox.critical(self, "Error", f"Um erro ocorreu: {e}")
return pd.DataFrame()
else:
QMessageBox.warning(self, "Error", "Selecione o tipo de arquivo")
return pd.DataFrame()

def tomi_index_calculation(self):
dataframe = self.read_file()
profundidade = dataframe.iloc[:,0]
d13C = dataframe.iloc[:,5]
TOC_TN = dataframe.iloc[:,6]
self.krigingModel = self.krigingInterpolationModel.currentText()
Expand Down Expand Up @@ -264,19 +280,21 @@ def export_data(self):
dialog = QFileDialog()
filename, _ = dialog.getSaveFileName(filter="Excel files (*.xlsx)")

if filename and self.formationName:
self.formationCheck = [self.formationName if self.formationName else 'Formação']

if filename:
# If a file name is selected, export the dataframe to a .csv file
for col in export_dataframe.columns:
if export_dataframe[col].dtype == 'float64':
export_dataframe[col] = export_dataframe[col].apply(lambda x: str(x).replace('.', ','))

export_dataframe.to_excel(filename,
sheet_name=self.formationName,
sheet_name=self.formationCheck[0],
index=False)
QMessageBox.information(self, "Exportação de dados",
f"Os dados foram exportados com sucesso para {filename}")
QMessageBox.information(self, "Delimitação",
f"Lembre-se que os dados foram exportados com '.' ao invés de ','")
elif filename and self.formationName == '':
export_dataframe.to_excel(filename,
sheet_name='Formação',
index=False)

def main():
app = QApplication(sys.argv)
Expand Down
41 changes: 36 additions & 5 deletions README.md
Original file line number Diff line number Diff line change
@@ -1,9 +1,40 @@
<center>
<img src="tomi_icon.png">
</center>
<img src="tomi_icon.png">

# Onyx TOMI Plotter

# TOMI Index Plotter
A plotter for the Terrestrial Organic Matter Input Index

## Utilização
Para utilizá-lo, basta baixar e executar o arquivo

Para utilizá-lo, basta baixar e executar o arquivo

## Como usar

Para utilizar o programa:

* Abra o programa executando o arquivo onyx.exe
* Quando a interface aparecer, no lado esquerdo você encontrará as opções necessárias para plotar o TOMI Index.
* Você irá encontrar uma caixa de seleção, para você selecionar o arquivo que deseja plotar. Você também pode importar o arquivo. Onyx TOMI Plotter suporta arquivos `.csv`, `.txt` e `.xlsx`.
* Após selecionar (ou importar) o arquivo, precisará selecionar o tipo de arquivo selecionado (CSV, TXT ou XLSX).
* **ATENÇÃO**: Atualmente, o programa leva em consideração que o arquivo de entrada possui as colunas na seguinte ordem:

<center>

| Profundidade | TVDSS | TN% | d15N | TOC% | d13C | TOC/TN |
|--------------|-----------|-----|------|------|--------|--------|
| 1665 | MR - 1665 | -- | -- | -- | -27.20 | 28.43 |
| 1674 | MR - 1674 | -- | -- | -- | -26.90 | 22.88 |

</center>

Os valores que realmente importam para o cálculo do TOMI Index são o de d13C e TOC/TN. Se você não tiver esses valores, o programa não conseguirá calcular o TOMI Index. O valor de TVDSS, que as vezes não está na segunda coluna, não é necessário se você tiver o valor de mesa rotativa (TVDSS = MR - Prof. Medida).
* Você precisará do valor da mesa rotativa para o cálculo do TOMI Index. Se você não tiver, deixar o espaço em branco apenas resultará em um gráfico utilizando a profundidade medida.
* Se você selecionar um arquivo `.xlsx`, precisará especificar em qual aba do arquivo está o seu arquivo. Se você selecionar um arquivo `.csv` ou `.txt`, o programa irá automaticamente detectar o arquivo. Lembre-se, os dados precisam estar na ordem correta.
* Após isso, pode clicar em plotar, e o programa irá plotar o TOMI Index. Se quiser configurar o plot (alterar o título, cor da linha e o modelo da interpolação realizada) você pode fazer isso clicando na aba "Config. do plot".
* Também tem a opção "Editar" na parte de baixo do plot. Lá você pode alterar algumas configurações mais específicas do plot.
* Na hora de exportar ou salvar, você pode escolher o nome da Formação para nomear a aba da planilha. Se não colocar nada, o nome padrão é "Formação".
* Se você quiser exportar os dados do TOMI Index, basta clicar em "Exportar dados" e escolher o local onde deseja salvar o arquivo.
* Se você quiser salvar o plot, basta clicar em "Salvar" e escolher o local onde deseja salvar o arquivo.

## Créditos
Esse programa foi desenvolvido por André Albano - [GIECAR](http://gcr.sites.uff.br/) 2024
Binary file modified __pycache__/tomiUI.cpython-312.pyc
Binary file not shown.
Binary file added image.png
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Binary file removed mpanicon/circle.png
Binary file not shown.
Binary file removed mpanicon/dashed.png
Binary file not shown.
Binary file removed mpanicon/dashedCircle.png
Binary file not shown.
Binary file removed mpanicon/square.png
Binary file not shown.
67 changes: 67 additions & 0 deletions tests.ipynb
Original file line number Diff line number Diff line change
Expand Up @@ -108,6 +108,73 @@
"plt.xlabel(\"Index (%)\")"
]
},
{
"cell_type": "code",
"execution_count": null,
"metadata": {},
"outputs": [],
"source": []
},
{
"cell_type": "code",
"execution_count": 22,
"metadata": {},
"outputs": [
{
"data": {
"text/plain": [
"0 1665\n",
"1 1674\n",
"2 1677\n",
"3 1680\n",
"4 1683\n",
"5 1686\n",
"6 1689\n",
"7 1692\n",
"8 1695\n",
"9 1698\n",
"10 1701\n",
"11 1704\n",
"12 1707\n",
"13 1710\n",
"14 1713\n",
"15 1716\n",
"16 1719\n",
"17 1722\n",
"18 1725\n",
"19 1728\n",
"20 1731\n",
"21 1734\n",
"22 1737\n",
"23 1740\n",
"24 1743\n",
"25 1746\n",
"26 1749\n",
"27 1752\n",
"28 1755\n",
"29 1758\n",
"30 1761\n",
"31 1764\n",
"Name: Profundidade, dtype: int64"
]
},
"execution_count": 22,
"metadata": {},
"output_type": "execute_result"
}
],
"source": [
"import pandas as pd\n",
"\n",
"fmane2 = \"./uploads/@CN_OGX-49.xlsx\"\n",
"\n",
"longa = pd.read_excel(fmane2,\n",
" skiprows=0,\n",
" sheet_name='TUDO')\n",
"\n",
"longa.iloc[:,0]"
]
},
{
"cell_type": "code",
"execution_count": null,
Expand Down
42 changes: 16 additions & 26 deletions tomiUI.py
Original file line number Diff line number Diff line change
Expand Up @@ -26,7 +26,7 @@ class Ui_MainWindow(object):
def setupUi(self, MainWindow):
if not MainWindow.objectName():
MainWindow.setObjectName(u"MainWindow")
MainWindow.resize(936, 877)
MainWindow.resize(1101, 888)
icon = QIcon()
icon.addFile(u"tomi_icon.png", QSize(), QIcon.Normal, QIcon.Off)
MainWindow.setWindowIcon(icon)
Expand Down Expand Up @@ -103,7 +103,7 @@ def setupUi(self, MainWindow):
MainWindow.setCentralWidget(self.centralwidget)
self.menubar = QMenuBar(MainWindow)
self.menubar.setObjectName(u"menubar")
self.menubar.setGeometry(QRect(0, 0, 936, 21))
self.menubar.setGeometry(QRect(0, 0, 1101, 21))
self.menuView = QMenu(self.menubar)
self.menuView.setObjectName(u"menuView")
MainWindow.setMenuBar(self.menubar)
Expand Down Expand Up @@ -147,18 +147,6 @@ def setupUi(self, MainWindow):

self.importFileBtn = QPushButton(self.groupBox)
self.importFileBtn.setObjectName(u"importFileBtn")
self.importFileBtn.setStyleSheet(u"QPushButton {\n"
" border-radius: 5px;\n"
" border: 1px solid #ababab;\n"
" height: 20px;\n"
" background-color: qlineargradient(spread:pad, x1:0.454545, y1:0, x2:0.454545, y2:1, stop:0 rgba(253, 253, 253, 255), stop:1 rgba(239, 239, 239, 255));\n"
"\n"
" \n"
"}\n"
"\n"
"QPushButton:hover {\n"
" background: qlineargradient(spread:pad, x1:0.454545, y1:0, x2:0.454545, y2:1, stop:0 rgba(254, 254, 254, 255), stop:1 rgba(248, 248, 248, 255));\n"
"}")

self.verticalLayout_3.addWidget(self.importFileBtn)

Expand Down Expand Up @@ -205,6 +193,19 @@ def setupUi(self, MainWindow):

self.verticalLayout_3.addWidget(self.xlsxFileRadioButton, 0, Qt.AlignHCenter)

self.sheetTabLabel = QLabel(self.groupBox)
self.sheetTabLabel.setObjectName(u"sheetTabLabel")

self.verticalLayout_3.addWidget(self.sheetTabLabel)

self.sheetPageInput = QLineEdit(self.groupBox)
self.sheetPageInput.setObjectName(u"sheetPageInput")
self.sheetPageInput.setStyleSheet(u"QLineEdit { \n"
" text-align: center; \n"
"}")

self.verticalLayout_3.addWidget(self.sheetPageInput)

self.label_11 = QLabel(self.groupBox)
self.label_11.setObjectName(u"label_11")

Expand All @@ -217,18 +218,6 @@ def setupUi(self, MainWindow):

self.plotTOMIBtn_2 = QPushButton(self.groupBox)
self.plotTOMIBtn_2.setObjectName(u"plotTOMIBtn_2")
self.plotTOMIBtn_2.setStyleSheet(u"QPushButton {\n"
" border-radius: 5px;\n"
" border: 1px solid #ababab;\n"
" height: 20px;\n"
" background-color: qlineargradient(spread:pad, x1:0.454545, y1:0, x2:0.454545, y2:1, stop:0 rgba(253, 253, 253, 255), stop:1 rgba(239, 239, 239, 255));\n"
"\n"
" \n"
"}\n"
"\n"
"QPushButton:hover {\n"
" background: qlineargradient(spread:pad, x1:0.454545, y1:0, x2:0.454545, y2:1, stop:0 rgba(254, 254, 254, 255), stop:1 rgba(248, 248, 248, 255));\n"
"}")

self.verticalLayout_3.addWidget(self.plotTOMIBtn_2)

Expand Down Expand Up @@ -386,6 +375,7 @@ def retranslateUi(self, MainWindow):
self.csvFileRadioButton.setText(QCoreApplication.translate("MainWindow", u".csv", None))
self.txtFileRadioButton.setText(QCoreApplication.translate("MainWindow", u".txt", None))
self.xlsxFileRadioButton.setText(QCoreApplication.translate("MainWindow", u".xlsx", None))
self.sheetTabLabel.setText(QCoreApplication.translate("MainWindow", u"<html><head/><body><p align=\"center\"><span style=\" font-size:12pt;\">Aba da Planilha</span></p></body></html>", None))
self.label_11.setText(QCoreApplication.translate("MainWindow", u"<html><head/><body><p align=\"center\"><span style=\" font-size:12pt;\">Mesa Rotativa:</span></p></body></html>", None))
self.plotTOMIBtn_2.setText(QCoreApplication.translate("MainWindow", u"Plotar", None))
self.groupBox_2.setTitle(QCoreApplication.translate("MainWindow", u"Exportar", None))
Expand Down
Loading

0 comments on commit 9b1dd58

Please sign in to comment.