def run_script(session): from chimerax.core.errors import UserError from chimerax.isolde.parmed import install_parmed_if_necessary install_parmed_if_necessary(session) from Qt.QtWidgets import QFileDialog import os filter = "AMBER Parameter files (*.mol2 *.frcmod)" files, _ = QFileDialog.getOpenFileNames(None, "Choose one .mol2 and one .frcmod file", "", filter) if len(files)!=2: raise UserError("Please select exactly one .mol2 and one .frcmod file!") matched_files = {} for f in files: matched_files[os.path.splitext(f)[1].lower()] = f if '.mol2' not in matched_files.keys() or '.frcmod' not in matched_files.keys(): raise UserError('Please select exactly one .mol2 and one .frcmod file!') mol2, frcmod = matched_files['.mol2'], matched_files['.frcmod'] from chimerax.isolde.openmm.amberff.amber_convert import amber_to_ffxml try: ffxml = amber_to_ffxml(frcmod, mol2) except Exception as e: raise UserError(f'ParmEd failed to run with the following error. Do your .mol2 and .frcmod match?\n {str(e)}') session.logger.info(f'Converted AMBER files {mol2} and {frcmod} to OpenMM FFXML file {ffxml}.') if hasattr(session, 'isolde'): ff_name = session.isolde.sim_params.forcefield forcefield = session.isolde.forcefield_mgr[ff_name] forcefield.loadFile(ffxml, resname_prefix='USER_') session.logger.info('This has been loaded into ISOLDE\'s forcefield for this session. For ' 'future sessions you should add it using the "Load residue MD definition(s)" button.') else: session.logger.info('On starting ISOLDE you can add it to the forcefield using the ' '"Load residue MD definition(s)" button.')
def browse_file(self): filter_list = 'File({})'.format(' '.join( ['*' + e for e in self.filters])) if self.filters else 'Any File(*)' if self.multiple: r_files, _ = QFileDialog.getOpenFileNames(self, 'Browse Files', self.path, filter_list) if r_files: self.filesChanged.emit(r_files) self.path = r_files[0] else: r_file, _ = QFileDialog.getOpenFileName(self, 'Browse File', self.path, filter_list) if r_file: self.fileChanged.emit(r_file) self.path = r_file
def table_clicked(self, row, column): """ if the last row is clicked, open a file browser and add the files to the list otherwise, if the 2nd column is clicked (the trash can), remove that row """ if row == self.table.rowCount() - 1 or self.table.rowCount() == 1: filenames = QFileDialog.getOpenFileNames( filter="Python Files (*.py)") if filenames[0]: self.table.setRowCount(self.table.rowCount() - 1) self.add_files(filenames[0]) elif column == 1: self.table.removeRow(row)