Beispiel #1
0
    def _construct_traj(self):
        logger.debug('Loading Trajectory object for model {0} ({1}/{2})'.format(self.df.templateid.iloc[0], 0, len(self.df.model_filepath)))
        traj = mdtraj.load_pdb(self.df.model_filepath[0])
        remove_disulfide_bonds_from_topology(traj.topology)
        self.traj = traj

        for m, model_filepath in enumerate(self.df.model_filepath[1:]):
            logger.debug('Loading Trajectory object for model {0} ({1}/{2})'.format(self.df.templateid.iloc[m+1], m+1, len(self.df.model_filepath)))
            traj = mdtraj.load_pdb(model_filepath)
            remove_disulfide_bonds_from_topology(traj.topology)
            self.traj += traj
Beispiel #2
0
    def _construct_traj(self):
        logger.debug(
            'Loading Trajectory object for model {0} ({1}/{2})'.format(
                self.df.templateid.iloc[0], 0, len(self.df.model_filepath)))
        traj = mdtraj.load_pdb(self.df.model_filepath[0])
        remove_disulfide_bonds_from_topology(traj.topology)
        self.traj = traj

        for m, model_filepath in enumerate(self.df.model_filepath[1:]):
            logger.debug(
                'Loading Trajectory object for model {0} ({1}/{2})'.format(
                    self.df.templateid.iloc[m + 1], m + 1,
                    len(self.df.model_filepath)))
            traj = mdtraj.load_pdb(model_filepath)
            remove_disulfide_bonds_from_topology(traj.topology)
            self.traj += traj
Beispiel #3
0
    def _gen_implicit_start_models(self,
                                   ff='amber99sbildn.xml',
                                   implicit_water_model='amber99_obc.xml',
                                   ph=8.0):

        self.ph = ph
        from simtk.openmm import app

        valid_model_templateids = [
            templateid for templateid in self.templateids if os.path.exists(
                os.path.join(
                    self.models_target_dir, templateid, ensembler.core.
                    model_filenames_by_ensembler_stage['refine_implicit_md']))
        ]

        gen_model_templateids = [
            templateid for templateid in valid_model_templateids
            if not os.path.exists(
                os.path.join(self.models_target_dir, templateid,
                             self.model_filename))
        ]

        # make reference model
        forcefield = app.ForceField(ff, implicit_water_model)
        reference_model_id = get_highest_seqid_existing_model(
            models_target_dir=self.models_target_dir)
        logger.debug('Using {0} as reference model'.format(reference_model_id))
        reference_model_path = os.path.join(
            self.models_target_dir, reference_model_id,
            model_filenames_by_ensembler_stage['build_models'])
        with gzip.open(reference_model_path) as reference_pdb_file:
            reference_pdb = app.PDBFile(reference_pdb_file)
        remove_disulfide_bonds_from_topology(reference_pdb.topology)
        reference_topology = reference_pdb.topology
        reference_modeller = app.Modeller(reference_pdb.topology,
                                          reference_pdb.positions)
        reference_variants = reference_modeller.addHydrogens(forcefield,
                                                             pH=self.ph)

        for template_index in range(mpistate.rank, len(gen_model_templateids),
                                    mpistate.size):
            templateid = gen_model_templateids[template_index]
            logger.debug(
                'Generating implicit-start model for {0}'.format(templateid))

            try:
                input_model_filepath = os.path.join(
                    self.models_target_dir, templateid,
                    model_filenames_by_ensembler_stage['build_models'])
                output_model_filepath = os.path.join(self.models_target_dir,
                                                     templateid,
                                                     self.model_filename)

                with gzip.open(input_model_filepath) as pdb_file:
                    pdb = app.PDBFile(pdb_file)

                remove_disulfide_bonds_from_topology(pdb.topology)
                modeller = app.Modeller(reference_topology, pdb.positions)
                modeller.addHydrogens(forcefield,
                                      pH=self.ph,
                                      variants=reference_variants)
                topology = modeller.getTopology()
                positions = modeller.getPositions()

                with gzip.open(output_model_filepath,
                               'wt') as output_model_file:
                    app.PDBFile.writeHeader(topology, file=output_model_file)
                    app.PDBFile.writeFile(topology,
                                          positions,
                                          file=output_model_file)
                    app.PDBFile.writeFooter(topology, file=output_model_file)

            except Exception as e:
                print('Error for model {0}: {1}'.format(templateid, e))
                continue
Beispiel #4
0
    def _gen_implicit_start_models(
            self,
            ff='amber99sbildn.xml', implicit_water_model='amber99_obc.xml',
            ph=8.0):

        self.ph = ph
        from simtk.openmm import app

        valid_model_templateids = [
            templateid for templateid in self.templateids
            if os.path.exists(
                os.path.join(
                    self.models_target_dir, templateid,
                    ensembler.core.model_filenames_by_ensembler_stage['refine_implicit_md']
                )
            )
        ]

        gen_model_templateids = [
            templateid for templateid in valid_model_templateids
            if not os.path.exists(
                os.path.join(self.models_target_dir, templateid, self.model_filename)
            )
        ]

        # make reference model
        forcefield = app.ForceField(ff, implicit_water_model)
        reference_model_id = get_highest_seqid_existing_model(models_target_dir=self.models_target_dir)
        logger.debug('Using {0} as reference model'.format(reference_model_id))
        reference_model_path = os.path.join(self.models_target_dir, reference_model_id, model_filenames_by_ensembler_stage['build_models'])
        with gzip.open(reference_model_path) as reference_pdb_file:
            reference_pdb = app.PDBFile(reference_pdb_file)
        remove_disulfide_bonds_from_topology(reference_pdb.topology)
        reference_topology = reference_pdb.topology
        reference_modeller = app.Modeller(reference_pdb.topology, reference_pdb.positions)
        reference_variants = reference_modeller.addHydrogens(forcefield, pH=self.ph)

        for template_index in range(mpistate.rank, len(gen_model_templateids), mpistate.size):
            templateid = gen_model_templateids[template_index]
            logger.debug('Generating implicit-start model for {0}'.format(templateid))

            try:
                input_model_filepath = os.path.join(self.models_target_dir, templateid, model_filenames_by_ensembler_stage['build_models'])
                output_model_filepath = os.path.join(self.models_target_dir, templateid, self.model_filename)

                with gzip.open(input_model_filepath) as pdb_file:
                    pdb = app.PDBFile(pdb_file)

                remove_disulfide_bonds_from_topology(pdb.topology)
                modeller = app.Modeller(reference_topology, pdb.positions)
                modeller.addHydrogens(forcefield, pH=self.ph, variants=reference_variants)
                topology = modeller.getTopology()
                positions = modeller.getPositions()

                with gzip.open(output_model_filepath, 'wt') as output_model_file:
                    app.PDBFile.writeHeader(topology, file=output_model_file)
                    app.PDBFile.writeFile(topology, positions, file=output_model_file)
                    app.PDBFile.writeFooter(topology, file=output_model_file)

            except Exception as e:
                print('Error for model {0}: {1}'.format(templateid, e))
                continue