diff options
Diffstat (limited to 'src/main/python/utils/ComponentSelector.py')
-rw-r--r-- | src/main/python/utils/ComponentSelector.py | 185 |
1 files changed, 185 insertions, 0 deletions
diff --git a/src/main/python/utils/ComponentSelector.py b/src/main/python/utils/ComponentSelector.py new file mode 100644 index 0000000..a522834 --- /dev/null +++ b/src/main/python/utils/ComponentSelector.py @@ -0,0 +1,185 @@ +from PyQt5.QtCore import * +from PyQt5.QtWidgets import * +from PyQt5.QtGui import * +from PyQt5.uic import loadUiType +import os, sys +import pandas as pd +current = os.path.dirname(os.path.realpath(__file__)) +parent = os.path.dirname(current) +parentPath = os.path.dirname(parent) +sys.path.append(parent) + +from Simulator.Databases.Databases import ChemsepDatabase +ui_dialog,_ = loadUiType(parentPath+'/ui/utils/ComponentSelector.ui') + + +#df = pd.read_csv("compoundsDatabase.csv") + +compound_selected = [] #list storing components that are selected inintialised as empty + +class ComponentSelector(QDialog,ui_dialog): + def __init__(self,parent=None): + QDialog.__init__(self,parent) + + self.setupUi(self) + + self.dict1=dict()#empty dictionary which will store the obj and its compound + #self.DB1=#instance of Database class in Database.py module + self.instance=[ChemsepDatabase()] #list of all the instances + self.lines=[] + + for i in self.instance: + x=i.get_comp_name_list() + self.dict1[i]=x + self.lines+=x + #print(self.lines) + + + #self.DB1_list=self.DB1.get_comp_name_list() + #storingchemsep + #database compound list in DB1_list + #self.dict1[self.DB1]=self.DB1_list #storing the list as a value and the db as key in dictionary + #self.lines=self.DB1_list #combined list of all the edited compounds + + self.model = QStringListModel() + self.model.setStringList(self.lines) + + self.completer = QCompleter() + self.completer.setCaseSensitivity(Qt.CaseInsensitive) + self.completer.setModel(self.model) + + # QCompleter completes the text written in lineedit + self.lineEdit.setCompleter(self.completer) + self.compoundSelectButton.clicked.connect(self.compound_selection) + self.compoundSelectButton.setAutoDefault(False) + self.pushButton.clicked.connect(self.accept) + self.pushButton_2.clicked.connect(self.cancel) + self.pushButton_3.clicked.connect(self.remove_items) + + def final_list(self,*list_name): + self.list_final=[] + #add multiple lists + for i in list_name: + self.list_final+=i + return (self.list_final) + + def is_compound_selected(self): + if not compound_selected: + return False + else: + return True + + #attrib: + #CAS fro CAS Number + #CompoundID for Name + #Smiles for Molecular Formula + #MolecularWeight for Molecular Weight + +#the below function will match the entered compound and get the database obj + #of the corresponding database + + def get_object(self,component): + for ele in self.dict1: + values=self.dict1[ele] + for ind in values: + if ind ==component: + return(ele) + + +#the below finction removes the before added extra string from the cmpounds + def get_original_name(self,component,removing_attrib): + self.temp_comp= component.replace(removing_attrib,'') + return(self.temp_comp) + + def compound_selection(self, *args): + if len(args) == 2: + self.comp = args[1] #helpful when loading saved data + else: + self.comp = self.lineEdit.text() #gets entered text + if self.comp in self.lines: #matches with the db + if self.comp not in compound_selected: + compound_selected.append(self.comp) # appending compound in the list + self.obj=self.get_object(self.comp) #obj will store the key of the dictionary + #and thus store the instance of the class to which the component belongs + self.removing_attrib='(' + self.obj.name + ')' #getting the attribute that is to be removed + self.comp=self.get_original_name(self.comp,self.removing_attrib) + #getting only air, water etc from air chemsep etc + + + self.prop_list=self.obj.get_comp_prop(self.comp) #getting prop of the comp + #obj is the required class object + # self.creating_mo_file() + self.final_mo() + + self.lineEdit.clear() + #print(compound_selected) + + self.CAS=self.obj.get_value(self.comp,'CAS') + self.name=self.comp + self.molecular_formula=self.obj.get_value(self.comp, 'StructureFormula') + self.molecular_weight=self.obj.get_value(self.comp, 'MolecularWeight') + + dict={'CAS':self.CAS,'Name':self.name,'Molecular Formula':self.molecular_formula,'Molecular Weight':self.molecular_weight} + #converted everything to a dictionary which will be passes to addtable + #function as a parameter. + #print(dict) + self.add_to_table(dict) + else: + self.show_error() + + @staticmethod + def set_compounds(compounds): + # compound_selected = compounds + for i in compounds: + compound_selected.append(i) + + def add_to_table(self,a): + try: + row_position = self.tableWidget.rowCount() + self.tableWidget.insertRow(row_position) + self.tableWidget.setItem(row_position , 0, QTableWidgetItem(str(a['CAS']))) + self.tableWidget.setItem(row_position , 1, QTableWidgetItem(str(a['Name']))) + self.tableWidget.setItem(row_position , 2, QTableWidgetItem(str(a['Molecular Formula']))) + self.tableWidget.setItem(row_position , 3, QTableWidgetItem(str(a['Molecular Weight']))) + except Exception as e: + exc_type, exc_obj, exc_tb = sys.exc_info() + fname = os.path.split(exc_tb.tb_frame.f_code.co_filename)[1] + #print(exc_type, fname, exc_tb.tb_lineno) + + def add_compounds_to_list(self,comp): # which list? + self.item = QListWidgetItem() + self.item.setText(comp) + self.listWidget.addItem(self.item) + + def remove_items(self): + try: + item = self.tableWidget.item(self.tableWidget.currentRow(),1).text() + '(chemsep)' + self.tableWidget.removeRow(self.tableWidget.currentRow()) + compound_selected.remove(item) + except Exception as e: + print(e) + + def show_error(self): + QMessageBox.about(self, 'Important', "Selected Compound is not Available") + + def cancel(self): + compound_selected.clear() + self.tableWidget.setRowCount(0) + self.reject() + + def get_compounds(self): + return compound_selected + + def final_mo(self): + self.f_mo=open(parentPath+'/Simulator/database.mo','w+') + self.f_mo.write('package database\n') + for line in self.prop_list: + self.f_mo.write(line) + self.f_mo.write('\n') + self.f_mo.write('\nend database;') + self.f_mo.close() + + def accept(self): + #self.parent().container.update_compounds() + return super().accept() +
\ No newline at end of file |