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.')
        
Exemple #2
0
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)