def limpaArquivoProteinas(self): diret1 = "./outputFiles/" diret2 = "./inputFiles/" proteinas = leCsv(diret2+"pdbsProteina.txt") outliers = leCsv(diret1+"outliers.txt") listProt = [] listOutliers = [] listNovoProt = [] tamInicial = (len(proteinas)) #gravaConfig("quantidadeInicialProteinas", str(tamInicial).strip()) for x in proteinas: listProt.append(x.strip()) for x in outliers: listOutliers.append(x.strip()) for x in listProt: if not(x in listOutliers): listNovoProt.append(x+",".strip()) tam = len(listNovoProt) if tamInicial-tam < 1: QtGui.QMessageBox.information(self, "Message", "There are no outliers"+"\n"+"\n"+"Try to reducing the percentual value in the slider.") pass elif tam <20: QtGui.QMessageBox.information(self, "Message", "After this operation, the number of structures will be very small (only "+str(tam)+" structures)."+"\n"+"Is not possible exclude outliers!"+"\n"+"\n"+"Try increasing the percentage on the slider,") pass else: listNovoProt[tam-1] = listNovoProt[tam-1].replace(",","") # retira ultima virgula distancia = pegaConfig("distanciaAtual").strip() txtOut = str(outliers).replace("'", "") txtOut = txtOut.replace("[", "") txtOut = txtOut.replace("]", "") txtOut = txtOut.lower() tracos = "-"*90 tamOut = tamInicial-tam texto = "This "+str(tamOut)+" structures will be excluded:"+"\n" +tracos+"\n" + txtOut texto = texto+"\n"+tracos texto = texto+"\n" +"\n"+"These outliers are considering only experiments with distances < "+distancia+u'\u212b' texto = texto +"\n"+"\n" + "Do you want to proceed?" reply = QtGui.QMessageBox.question(self, "List of Outliers",texto,QtGui.QMessageBox.Yes | QtGui.QMessageBox.No, QtGui.QMessageBox.No) if reply == QtGui.QMessageBox.Yes: self.toolButton_iniciar.setEnabled(False) self.horizontalSlider_percent.setEnabled(False) limpaArquivosOutlier() limpaPastasSaidaOutlier() grava(listNovoProt, diret2+"pdbsProteina.txt") gravaConfig("outlier", "yes") gravaConfig ("quantidadeProteinas",str(tam) ) self.label_inicial.setText(pegaConfig('quantidadeInicialProteinas').strip()) self.label_final.setText(pegaConfig('quantidadeProteinas').strip()) QtGui.QMessageBox.information(self, "Important !!!", "Operation completed"+"\n"+"\n"+'You must redo "Make File" and "Regression" again!') else: pass
def carregaDuasCaixasPDB(self): diret = "./inputFiles/" arqTreino = diret + "pdbsProteinaTreino.txt" arqTeste = diret + "pdbsProteinaTeste.txt" listaTraining = leCsv(arqTreino) listaTeste = leCsv(arqTeste) textoTraining = ', '.join(listaTraining) textoTeste = ', '.join(listaTeste) self.plainTextEdit_pdbsTestSet.setPlainText(textoTeste) self.plainTextEdit_pdbs.setPlainText(textoTraining)
def separaLiganteProteina(diretorio, arquivo, tipo, ligante): proteina = leCsv( diretorio + arquivo) # le arquivo com os pdbs a serem processados como proteinas contHetatm1 = 0 for prot in proteina: protArq = prot.strip() protArq = protArq.lower() + ".pdb" separa(protArq) ''' print ("|-------------------------------------------------|") print ("| * Foram criados arquivos so com Hetatm |") print ("| * Foram criados arquivos so com Atomo |") print ("|-------------------------------------------------|") print(".....Em processamento!(2)") ''' for prot in proteina: protArq = prot.strip() protArq = protArq.lower() cont1 = filtraHetatm( protArq, tipo, ligante ) # filtra os arquivos dos Hetero atomos para ficar so os que tem ki contHetatm1 = contHetatm1 + cont1 '''
def excluiLigantesRepetidos(): listaEstruturasFicam = [] listaExclusao = [] nomePdbs = leCsv("./inputFiles/pdbsProteina.txt") listaNova = criaListaUnicaLigantes(nomePdbs) for l in listaNova: # deixamos mesmo os que nao teem ki -> estou retirando essas a = search(listaEstruturasFicam, l[2]) # procura valor da lista em llistaEstruturasficam if len(a) > 0: ind = a[0][0] # pega o indice onde foi encontrado valor igual resolucaoNovo = float(l[1]) resolucaoAnterior = float(listaEstruturasFicam[ind][1]) if resolucaoNovo < resolucaoAnterior: # fica o que tem menor valor de resolucao cristalografica em REMARK 2 listaEstruturasFicam[ind] = l elif l[2] != None: listaEstruturasFicam.append(l) else: pass for i in nomePdbs: if not search(listaEstruturasFicam, i): listaExclusao.append(i) if len(listaEstruturasFicam) < 20: return False, 0 else: excluiArquivosRepetidos(listaExclusao) gravaArqProteina(listaEstruturasFicam) gravaConfig("quantidadeProteinas", str(len(listaEstruturasFicam))) return True, len(listaExclusao)
def carregaUmacaixaPDB(self): diret = "./inputFiles/" arqPdb = diret + "pdbsProteina.txt" listaPdb = leCsv(arqPdb) textoPdb = ', '.join(listaPdb) self.plainTextEdit_pdbs.setPlainText(textoPdb) self.textoInicalPdb = textoPdb
def geraArquivoTesteTreino(diret, arquivo, seed): conteudo = [] semConteudo = [] # arquivo de pdbs sem ki arquivoParaLer = leCsv( diret + arquivo) # le arquivo com os pdbs a serem processados como proteinas tamLista = len(arquivoParaLer) tamTreino = int(tamLista * 0.7) + 1 # pega 70% para treino random.seed(seed) lista_aleatoria = random.sample(range(0, tamLista), tamTreino) #lista_aleatoria = numpy.random.seed()(range(0,tamLista), tamTreino,100) listaTreino = [] listaTeste = [] x = 0 QtGui.QApplication.processEvents() # para não travar usar antes de loops for prot in arquivoParaLer: if x in lista_aleatoria: listaTreino.append(prot) else: listaTeste.append(prot) x += 1 # acresce posição textoTreino = ', '.join(listaTreino) textoTeste = ', '.join(listaTeste) grava(textoTreino, diret + "pdbsProteinaTreino.txt") grava(textoTeste, diret + "pdbsProteinaTeste.txt")
def apagaFake(self, arq): # verifica se o arquivo ki eh fake e apaga lista = leCsv(arq) if lista: texto = ''.join(lista) if "FAKE" in texto: apagaArquivo(arq) else: pass
def caixatexto(self, textoModelo, textoInformacoes, nomeModelo): if self.window12 is None: diret = "./results/" arqTeste = diret + "binding_affinity_test_set_" + nomeModelo + ".csv" arqTreino = diret + "binding_affinity_training_set_" + nomeModelo + ".csv" self.window12 = winCaixaTexto.textos(self) self.window12.label.setText("Visualization for " + nomeModelo) self.window12.textBrowser_modelo.setPlainText(textoModelo) self.window12.textBrowser_informacoes.setPlainText( textoInformacoes) list = leCsv(arqTreino) texto = self.formataTextoCaixa(list) self.window12.textBrowser_treino.setPlainText(texto) list = leCsv(arqTeste) texto = self.formataTextoCaixa(list) self.window12.textBrowser_teste.setPlainText(texto) self.window12.show() self.window12 = None else: pass
def existePdbSeparado(self): ''' verifica se foi gerado o arquivo teste e training, pois a variavel de configuracao "geraSets" pode nao estar criada ainda ''' arquivo = "./inputFiles/" + "pdbsProteinaTreino.txt" texto = leCsv(arquivo) #input("Press Enter to continue...") if len(texto) > 10: return True else: return False
def gravaArqProteina(listaEstruturasFicam): # cria novo arquivo proteinas textoPdb = '' listaEstruturasFicam = sorted(listaEstruturasFicam) for i in listaEstruturasFicam: textoPdb = textoPdb + i[0] + "," # retira ultima virgula pos = textoPdb.rfind(',') t1 = list(textoPdb) t1[pos] = '' textoPdb = "".join(t1) arqProteina = "./inputFiles/pdbsProteina.txt" arqTreino = "./inputFiles/pdbsProteinaTreino.txt" arqTeste = "./inputFiles/pdbsProteinaTeste.txt" grava(textoPdb, arqProteina) #retira estruturas no arquivo treino listaTreinoNova = [] textoTreino = leCsv(arqTreino) if len(textoTreino ) > 0: # ve se ja tem os arquivos ou se serao gerados apos preparo listaTreino = textoTreino for s in listaEstruturasFicam: if str(s[0]) in listaTreino: listaTreinoNova.append(s[0]) # retira estrutura arquivo teste listaTesteNova = [] textoTeste = leCsv(arqTeste) listaTeste = textoTeste for s in listaEstruturasFicam: if str(s[0]) in listaTeste: listaTesteNova.append(s[0]) textoTreino = ",".join(listaTreinoNova) textoTeste = ",".join(listaTesteNova) grava(textoTreino, arqTreino) grava(textoTeste, arqTeste) """
def geraArquivoKiFake(self, ligante): # caso a proteina não tenha arquivo Ki arquivo = "./inputFiles/pdbsProteinaUsu.txt" texto = leCsv(arquivo) estrutura = ''.join(texto).upper() arq = "./ki/" + estrutura.lower() + ".csv" self.apagaFake(arq) if not (existeArquivo(arq)): cab = "structureId" + "," + "chainId" + "," + "ligandId" + "," + "KiFake" + "\n" textoInibidor = cab + '"' + estrutura + '","' + "A" + '","' + ligante + '","' "10000000(BDB)FAKE" + '"' + "\n" open(arq, 'a').close() # cria arquivo Ki da estrutura try: my_PDB_fo = open(arq, "w") my_PDB_fo.write( textoInibidor) # grava dados fake de ki para a estrutura my_PDB_fo.close() except IOError: sys.exit("\nI can't file " + arq + " file!") else: pass
def fazExperimento(self): logText = "The theoretical log " + self.inibidor + " for:" self.label_log.setText(logText) diretorio = "./inputFiles/" # define diretorio para salvar o download self.ligante = self.lineEdit_Ligante.text().upper().strip() self.chamaRotinasPreparacao( diretorio, self.ligante ) # chama runcoes para preparar arquivos para processamento arquivosParaLerUsu = leCsv( diretorio + "pdbsProteinaUsu.txt" ) # le arquivo com os pdbs a serem processados como proteinas. Este arquvivo so contem pdbs que tem arquivo de KI correspondente arqModelo = self.modeloEscolhido if temLigante("./pdbs/", arquivosParaLerUsu) == False: reply = QtGui.QMessageBox.question( self, 'Message', "The estructure to experiment don't have the ligand " + self.ligante, QtGui.QMessageBox.Ok, QtGui.QMessageBox.Ok) pass else: # entra o valor da distância distancia = float(pegaModelo(arqModelo, "distancia").strip()) tipoMedia = pegaConfig("tipoMedia") mediaDistanciaPorPdb( arquivosParaLerUsu, distancia, "USU", self.progressBar) # gera arquivo com medias do conjunto treino diretorio, arquivo = geraArquivoComTermoDeEnergiaExperimento( arquivosParaLerUsu, distancia, "Usu", tipoMedia, self.ligante) #gera arquivo de treino if diretorio == "nok": # significa que nao existe o ligante return False formula = pegaModelo(arqModelo, "equacao") pdbNome, logKi, ki = geraExperimento("", arquivo, formula) logKiS = ("%.3f" % logKi) # vamos pegar só um valor calculado de ki pois a funcçao e utilizada tambem para conjunto teste logText = "The theoretical log " + self.inibidor + " for:" self.label_log.setText(logText.replace("\n", "") + "\n" + pdbNome) self.label_logTeorico.setText(str(logKiS)) return True
def geraArquivoProteinaFinal(diret, arquivo, tipo): progresso = 0 conteudo = [] semConteudo = [] # arquivo de pdbs sem ki arquivoParaLer = leCsv( diret + arquivo) # le arquivo com os pdbs a serem processados como proteinas for prot in arquivoParaLer: arquivo = prot.strip() # nome do arquivo pdb que esta em pdbsProteinas arquivo = arquivo.lower() + ".csv" #print (arquivo) if le(arquivo) == "S": conteudo.append(prot) conteudo.append(",") else: semConteudo.append(prot) semConteudo.append(",") tam = len(conteudo) tam2 = len(semConteudo) conteudo.pop(tam - 1) # para retirar a ultima virgula grava(conteudo, diret + "pdbsProteinaFinal" + tipo + ".txt") if semConteudo: semConteudo.pop(tam2 - 1) # para retirar a ultima virgula '''
def baixaPdbOk(self, event): ############ baixa PDBs ############## self.escondeBotoes() # Set up PDB url url_in = 'https://files.rcsb.org/download/' # Set up PDB access code nomePdbs = leCsv("./inputFiles/pdbsProteina.txt") totalArquivos = nomePdbs.__len__() varia = 100 / totalArquivos progresso = 0 count = 0 contaPausa = 0 mensagem = "Starting download PDB protein files from the site " + url_in self.label_cabecalho.setText(mensagem) self.progressBar.setValue(0) QtGui.QApplication.processEvents( ) # para não travar usar antes de loops for linha in nomePdbs: pdb_access = linha.strip() mensagem = pdb_access self.label_textoProgresso.setText(mensagem) # Call download_PDB_file() count = count + 1 my_dir_in = "./pdbs/" flag_4_file_present = pre_download( my_dir_in, pdb_access + ".pdb") #verifica se ja existe arquvio if not flag_4_file_present: download_PDB_file(url_in, pdb_access + ".pdb") progresso = progresso + varia self.progressBar.setValue(progresso) contaPausa = contaPausa + 1 if contaPausa > 100: contaPausa = 0 mensagem = "---> pausa tecnica. Aguarde que o programa continuara a rodar automaticamente..." self.label_textoProgresso.setText(mensagem) sleep( 30 ) # pausa para por exigencia do site se nao nao baixa todos mensagem = str(count) + ' files were correctly downloaded' self.label_textoProgresso.setText(mensagem) self.progressBar.setValue(100) ########## BAIXA ki ################################### # limpar diretorio self.progressBar.setValue(0) progresso = 0 files = glob.glob('./ki/*') QtGui.QApplication.processEvents() # para não travar ''' for f in files: os.remove(f) ''' my_dir_in = "./ki/" # futuramente e melhor ajustar o nome do diretorio para abranger todos os inibidores # define tipo inibidor if self.radioButton_Kd.isChecked(): self.inibidor = "Kd" elif self.radioButton_Ki.isChecked(): self.inibidor = "Ki" elif self.radioButton_IC50.isChecked(): self.inibidor = "IC50" elif self.radioButton_EC50.isChecked(): self.inibidor = "EC50" elif self.radioButton_deltaG.isChecked(): self.inibidor = "deltaG" binding_info = self.inibidor # Set up PDB url url_in = 'http://files.rcsb.org/download/' # Set up PDB access code nomePdbs = leCsv("./inputFiles/pdbsProteina.txt") totalArquivos = nomePdbs.__len__() count = 0 mensagem = "Starting download PDB " + binding_info + " files (constant interation):" + url_in self.label_cabecalho.setText(mensagem) QtGui.QApplication.processEvents( ) # para não travar usar antes de loops for linha in nomePdbs: pdb_access = linha.strip() mensagem = "File: " + pdb_access self.label_textoProgresso.setText(mensagem) structureId = linha.strip() # Call download_PDB_file() get_Bind(my_dir_in, structureId, binding_info) progresso = progresso + varia self.progressBar.setValue(progresso) ## muda cor caixa texto self.progressBar.setValue(100) self.movie.stop() self.label_relogio.hide() self.movie.stop() if self.checkBox_eliminateLigand.isChecked(): excluido, quantia = excluiLigantesRepetidos() if excluido == True: gravaConfig("excluiLigantes", "yes") QtGui.QMessageBox.information( self, "Message", str(quantia) + " repeated ligands were eliminated") self.carrega() else: QtGui.QMessageBox.information( self, "Message", "It is not possible to exclude repeated ligands because the amount of remaining structures is insufficient to obtain satisfactory results." + "\n" + "The download was successful.") QtGui.QMessageBox.information(self, "Message", "Operation completed") ## exclui arquivos que retornaram vazios arqKiVazio = kiVazio() textoKi = ','.join(arqKiVazio) textoKi = textoKi.replace(",", ", ") arqPdbVazio = pdbVazio() textoPdb = ','.join(arqPdbVazio) textoPdb = textoPdb.replace(",", ", ") mensagem = "The following files contain no information and have been discarded:" + "\n" + "Ki files:" + "\n" + textoKi mensagem = mensagem + "\n" + "PDB file:" + "\n" + textoPdb mensagem = mensagem + "\n" + "You must edit the PDB code boxes and delete them manually." if arqKiVazio or arqPdbVazio: QtGui.QMessageBox.information(self, "Message", mensagem) diret = "./ki/" for i in arqKiVazio: apagaArquivo(diret + i) # apaga arquivos ki que nao tem informação diret = "./pdbs/" for i in arqPdbVazio: apagaArquivo(diret + i) # apaga arquivos pdb que nao tem informação self.mostraBotoes() self.toolButton_ClearText.setEnabled(False) self.toolButton_saveText.setEnabled(False) self.progressBar.setValue(0) self.plainTextEdit_pdbs.setEnabled(False)
def salvaOk(self): diretorio = "./inputFiles/" arquivo = "pdbsProteina.txt" arquivoSai = diretorio + arquivo self.textoConfig = self.plainTextEdit_descricao.toPlainText() self.textoConfig = self.textoConfig.strip() textoPdbTraining = self.plainTextEdit_pdbs.toPlainText() textoPdbTraining = textoPdbTraining.replace(" ", "") textoPdbTraining = textoPdbTraining.replace( ",,", ",") # caso tenha esquecido alguma virgula textoPdbTraining = textoPdbTraining.upper() textoPdbTraining = textoPdbTraining.strip() self.plainTextEdit_pdbs.setPlainText(textoPdbTraining) if textoPdbTraining.endswith(','): # retira virgula se apos o texto textoPdbTraining = textoPdbTraining[:-1] self.plainTextEdit_pdbs.setPlainText(textoPdbTraining) textoPdbTest = self.plainTextEdit_pdbsTestSet.toPlainText() textoPdbTest = textoPdbTest.replace(" ", "") textoPdbTest = textoPdbTest.replace(",,", ",") textoPdbTest = textoPdbTest.upper() textoPdbTest = textoPdbTest.strip() self.plainTextEdit_pdbsTestSet.setPlainText(textoPdbTest) if textoPdbTest.endswith(','): # retira virgula se apos o texto textoPdbTest = textoPdbTest[:-1] self.plainTextEdit_pdbsTestSet.setPlainText(textoPdbTest) if len(textoPdbTest) > 0: # se conjunto teste existe coloca virgula vg = "," else: vg = "" if self.radioButton_trainingTest.isChecked(): textoPdb = textoPdbTraining + vg + textoPdbTest #une os dois conjunttos else: textoPdb = textoPdbTraining grava(textoPdb, arquivoSai) if self.radioButton_trainingTest.isChecked( ): # o usuário separou os arquivos self.gravaTreinoSet(textoPdbTraining, textoPdbTest, diretorio) else: self.habilitaUmaCaixaPDB() self.carregaUmacaixaPDB( ) # carrea uma caixa pois os arquvivos teste e treino serão separados depois lista = leCsv(arquivoSai) self.quantidadeProteinas = len(lista) self.salvaConfig() self.label_quantia.setText(pegaConfig("quantidadeProteinas").strip()) # define tipo inibidor if self.radioButton_Kd.isChecked(): self.inibidor = "Kd" elif self.radioButton_Ki.isChecked(): self.inibidor = "Ki" elif self.radioButton_IC50.isChecked(): self.inibidor = "IC50" elif self.radioButton_EC50.isChecked(): self.inibidor = "EC50" elif self.radioButton_deltaG.isChecked(): self.inibidor = "deltaG" gravaConfig("tipoAfinidade", self.inibidor.strip()) #define tipo media if self.radioButton_training.isChecked(): self.media = "training" elif self.radioButton_individual.isChecked(): self.media = "individual" gravaConfig("tipoMedia", self.media.strip()) comentarios = self.plainTextEdit_Comentarios.toPlainText() comentarios = comentarios.replace(",", "<vg>") gravaConfig("comentarios", comentarios) completaArquivoConfig() self.toolButton_baixa.setEnabled(True) self.desabilitaCampos() self.toolButton_saveText.setEnabled(False) self.toolButton_ClearText.setEnabled(False) self.toolButton_baixa.setEnabled(True) self.toolButton_cancela.setEnabled(False) self.toolButton_edita.setEnabled(True) self.toolButton_refina.setEnabled(False) self.toolButton_novo.setEnabled(True) self.toolButton_exit.setEnabled(True) # para poder desfazer self.textoInicalPdb = self.plainTextEdit_pdbs.toPlainText() self.textoInicalPdbTestSet = self.plainTextEdit_pdbsTestSet.toPlainText( ) self.textoInicialConfig = self.plainTextEdit_descricao.toPlainText() self.textoInicialComentarios = self.plainTextEdit_Comentarios.toPlainText( ) self.plainTextEdit_pdbs.setEnabled(False)
def geraArquivos(self): self.escondeBotoes() diretorio = "./inputFiles/" # define diretorio para salvar o download self.chamaRotinasPreparacao( diretorio ) # chama runcoes para preparar arquivos para processamento arquivosParaLerTes = leCsv( diretorio + "pdbsProteinaFinalTes.txt" ) # le arquivo com os pdbs a serem processados como proteinas. Este arquvivo so contem pdbs que tem arquivo de KI correspondente arquivosParaLerTre = leCsv(diretorio + "pdbsProteinaFinalTre.txt") # entra o valor da distância # entra o valor da distância distancia = 4.5 # padrao seedNum = self.comboBox_seed.currentText() seed = 'seed45' # semente que sera gravada no arquivo config.csv para usar no SF if self.radioButton_35.isChecked(): distancia = 3.5 seed = 'seed35' elif self.radioButton_45.isChecked(): distancia = 4.5 seed = 'seed45' elif self.radioButton_60.isChecked(): distancia = 6.0 seed = 'seed60' elif self.radioButton_75.isChecked(): distancia = 7.5 seed = 'seed75' elif self.radioButton_90.isChecked(): distancia = 9.0 seed = 'seed90' elif self.radioButton_120.isChecked(): distancia = 12.0 seed = 'seed120' elif self.radioButton_150.isChecked(): distancia = 15.0 seed = 'seed150' quantidadeArquivos = len(arquivosParaLerTes) + len(arquivosParaLerTre) if quantidadeArquivos < 20: QtGui.QMessageBox.information( self, "Message", "The number of structures is very small. Use another set!") self.mostraBotoes() else: self.geraArquivoMediaDistanciaPorPdb( arquivosParaLerTre, distancia, "TRE") #gera medias distancias no arquivo PDB para treino self.geraArquivoMediaDistanciaPorPdb( arquivosParaLerTes, distancia, "TES") #gera medias distancias no arquivo PDB para teste self.geraArquivoComTermoDeEnergia(arquivosParaLerTre, distancia, "Tre") #gera arquivo de treino self.geraArquivoComTermoDeEnergia(arquivosParaLerTes, distancia, "Tes") #gera arquivo de teste self.mostraBotoes() self.progressBar.setValue(0) self.label_cabecalho.setText('') self.label_textoProgresso.setText('') QtGui.QMessageBox.information(self, "Message", "Operation completed") self.label_distanciasUsadas.setText(self.get_distanciasUsadas()) gravaConfig( seed, seedNum ) # salva valores de seed no arquivo config para usar no SF e substituir no Mml.in