mirror of
https://github.com/Electrostatics/apbs-pdb2pqr.git
synced 2026-06-04 14:49:37 +08:00
Merge pull request #622 from Electrostatics/nathan/pdb2pka
Restore ligand functionality to PDB2PQR
This commit is contained in:
23
README.md
23
README.md
@@ -1,10 +1,8 @@
|
||||
<a href='http://www.poissonboltzmann.org/'><img src='https://img.shields.io/badge/homepage-poissonboltzmann-blue.svg'></a>
|
||||
|
||||
[](https://travis-ci.org/Electrostatics/apbs-pdb2pqr)
|
||||
|
||||

|
||||
|
||||

|
||||
[](http://www.poissonboltzmann.org)
|
||||
[](https://apbs-pdb2pqr.readthedocs.io/)
|
||||
[](https://travis-ci.org/Electrostatics/apbs-pdb2pqr)
|
||||

|
||||

|
||||
|
||||
# APBS and PDB2PQR: electrostatic and solvation properties for complex molecules
|
||||
|
||||
@@ -53,9 +51,10 @@ Additional support and contributors are listed in the [online documentation](htt
|
||||
|
||||
### APBS Datasheet
|
||||
|
||||
This shows the status of APBS functionality on different platforms.
|
||||
|
||||
OS | PYTHON VERSION | GEOFLOW | BEM,MSMS | FETK | PBSAM | PBAM | PYTHON | SHARED_LIBS | TESTS PASS
|
||||
------------- | ------------ | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | ------------- | -------------
|
||||
Ubuntu latest | 3.6, 3.7 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark:
|
||||
MacOSX latest | 3.6, 3.7 | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark: | :white_check_mark:
|
||||
Windows 10 | 3.7 | :white_check_mark: | :white_check_mark: | :x: | :x: | :white_check_mark: | :white_check_mark: | :x: | :white_check_mark:
|
||||
OS | PYTHON VERSION | GEOFLOW | BEM, MSMS | FETK | PBSAM | PBAM | PYTHON | SHARED_LIBS |
|
||||
------------- | -------------- | -------- | --------- | ----- | ----- | ---- | ------ | ----------- |
|
||||
Ubuntu latest | 3.6, 3.7 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
|
||||
MacOSX latest | 3.6, 3.7 | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ | ✔️ |
|
||||
Windows 10 | 3.7 | ✔️ | ✔️ | ❌ | ❌ | ✔️ | ✔️ | ❌ |
|
||||
|
||||
@@ -1,57 +0,0 @@
|
||||
#Build Configuration file for pdb2pqr
|
||||
#While you can specify these on the command line with var=value
|
||||
# this is the recommended way to setup a build.
|
||||
|
||||
#Uncomment the values you would like to change and set new values.
|
||||
|
||||
|
||||
#Installation PREFIX
|
||||
#Sets the install location of pdb2pqr.
|
||||
#This defaults to ~/pdb2pqr
|
||||
|
||||
#PREFIX="~/pdb2pqr"
|
||||
|
||||
#APBS binary
|
||||
#Change this to specify the location of the APBS binary if installed.
|
||||
#This is used for the web interface to pdb2pqr. Provide an absolute path. Relative paths and ~ usually will not work correctly.
|
||||
|
||||
#APBS=""
|
||||
|
||||
#MAX_ATOMS
|
||||
#Sets the maximum number of atoms in a protein for non-Opal job submission.
|
||||
#Only affects web tools. Default is 10000.
|
||||
|
||||
#MAX_ATOMS=10000
|
||||
|
||||
|
||||
#BUILD_PDB2PKA
|
||||
#Set to False to skip building ligand and pdb2pka support. Requires numpy.
|
||||
# Defaults to False
|
||||
|
||||
#BUILD_PDB2PKA=True
|
||||
|
||||
#DEBUG
|
||||
#Set to True to build compiled extentions with debug headers.
|
||||
#Defaults to False
|
||||
|
||||
#DEBUG=True
|
||||
|
||||
#CXXFLAGS
|
||||
#Set to add extra CXX flags to the build.
|
||||
#Defaults to ""
|
||||
|
||||
#EXTRA_CXXFLAGS="-fPIC"
|
||||
|
||||
#EXTRA_LINKFLAGS
|
||||
#Set to add extra CXX flags to the build.
|
||||
#Defaults to ""
|
||||
|
||||
#EXTRA_LINKFLAGS=""
|
||||
|
||||
|
||||
#REBUILD_SWIG
|
||||
#Set to True to rebuild the swig bindings.
|
||||
# Requires swig on the the user path.
|
||||
# Defaults to False
|
||||
|
||||
#REBUILD_SWIG=True
|
||||
@@ -92,6 +92,7 @@ def print_pqr_header(pdblist, atomlist, reslist, charge, force_field, ph_calc_me
|
||||
"""Print the header for the PQR file
|
||||
|
||||
Args:
|
||||
pdblist: list of lines from original PDB with header
|
||||
atomlist: A list of atoms that were unable to have charges assigned (list)
|
||||
reslist: A list of residues with non-integral charges (list)
|
||||
charge: The total charge on the protein (float)
|
||||
|
||||
77
pdb2pqr/pdb2pqr/ligand/__init__.py
Normal file
77
pdb2pqr/pdb2pqr/ligand/__init__.py
Normal file
@@ -0,0 +1,77 @@
|
||||
"""Ligand support functions
|
||||
|
||||
Jens Erik Nielsen, University College Dublin 2004
|
||||
"""
|
||||
import sys
|
||||
import pandas
|
||||
|
||||
|
||||
assert sys.version_info >= (3, 5)
|
||||
|
||||
|
||||
# TODO - this belongs in a configuration file somewhere other than here.
|
||||
#
|
||||
# When using these tables, the most specific Sybyl atom type should be used
|
||||
# first and then the generic element should be used
|
||||
RADII = {
|
||||
# NOTE - these are not the original PARSE radii but they are the ones
|
||||
# included in the previous version of PDB2PKA so I'm preserving them for
|
||||
# posterity. There's a claim they came from
|
||||
# http://amber.ch.ic.ac.uk/archive/ but that link no longer works.
|
||||
"not parse - do not use": {
|
||||
"C": 1.70, "N": 1.50, "O": 1.40, "S": 1.85, "H": 1.00, "Br": 2.50,
|
||||
"F": 1.20, "P": 1.90, "Cl": 1.75},
|
||||
# These are the PARSE radii from Table 4 of
|
||||
# http://doi.org/10.1021/j100058a043
|
||||
"parse": {
|
||||
"C.1": 2.00, "C.2": 2.00, "C.3": 2.00, "C": 1.70, "H": 1.00,
|
||||
"O": 1.40, "N": 1.50, "S": 1.85},
|
||||
# These are the ZAP radii from Table 2 of
|
||||
# http://doi.org/10.1021/jm070549%2B. Bondi radii should be used for
|
||||
# atoms not found in this table.
|
||||
"zap9": {
|
||||
"C": 1.87, "H": 1.10, "O.co2": 1.76, "N": 1.40, "S": 2.15, "F": 2.40,
|
||||
"Cl": 1.82, "I": 2.65},
|
||||
# These are the Bondi radii from Table 2 of
|
||||
# http://doi.org/10.1021/jm070549%2B
|
||||
"bondi-zap": {
|
||||
"C": 1.7, "H": 1.20, "O.co2": 1.52, "N": 1.55, "S": 1.80, "F": 1.47,
|
||||
"Cl": 1.75, "I": 1.98},
|
||||
# These are the Bondi radii from Table I of
|
||||
# http://doi.org/10.1021/j100785a001. NOTE - there are some variations to
|
||||
# the halogens in Table V that we might want to consider in the future.
|
||||
"bondi": {
|
||||
"H": 1.20, "He": 1.40, "C": 1.70, "N": 1.55, "O": 1.52, "F": 1.47,
|
||||
"Ne": 1.54, "Si": 2.10, "P": 1.80, "S": 1.80, "Cl": 1.75, "Ar": 1.88,
|
||||
"As": 1.85, "Se": 1.90, "Br": 1.85, "Kr": 2.02, "Te": 2.06, "I": 1.98,
|
||||
"Xe": 2.16}
|
||||
}
|
||||
|
||||
# Numbers of valence electrons for the groups of the periodic table
|
||||
VALENCE_BY_GROUP = {1: 1, 2: 2, 13: 3, 14: 4, 15: 5, 16: 6, 17: 7, 18: 8}
|
||||
# Groups of the periodic table
|
||||
ELEMENT_BY_GROUP = {
|
||||
1: ["H", "Li", "Na", "K", "Rb", "Cs", "Fr"],
|
||||
2: ["Be", "Mg", "Ca", "Sr", "Ba", "Ra"],
|
||||
13: ["B", "Al", "Ga", "In", "Tl", "Nh"],
|
||||
14: ["C", "Si", "Ge", "Sn", "Pb", "Fl"],
|
||||
15: ["N", "P", "As", "Sb", "Bi", "Mc"],
|
||||
16: ["O", "S", "Se", "Te", "Po", "Lv"],
|
||||
17: ["F", "Cl", "Br", "I", "At", "Ts"],
|
||||
18: ["He", "Ne", "Ar", "Kr", "Xe", "Rn", "Og"]
|
||||
}
|
||||
# Valence electrons by element
|
||||
VALENCE_BY_ELEMENT = {}
|
||||
for group, elem_list in ELEMENT_BY_GROUP.items():
|
||||
for elem in elem_list:
|
||||
VALENCE_BY_ELEMENT[elem] = VALENCE_BY_GROUP[group]
|
||||
|
||||
# Numbers of non-bonded electrons for Sybyl-type atoms. Adapted from
|
||||
# https://onlinelibrary.wiley.com/doi/abs/10.1002/jcc.540100804 (Table I).
|
||||
NONBONDED_BY_TYPE = {
|
||||
"Al": 0, "Br": 6, "C.1": 0, "C.2": 0, "C.3": 0, "C.ar": 0, "Ca": 0,
|
||||
"Cl": 6, "F": 6, "H": 0, "I": 6, "K": 0, "Li": 0, "N.1": 2, "N.2": 2,
|
||||
"N.3": 2, "N.4": 0, "N.am": 0, "N.ar": 2, "N.pl3": 0, "Na": 0,
|
||||
"O.2": 4, "O.3": 4, "P.3": 0, "S.2": 4, "S.3": 4, "S.o": 2, "S.o2": 0,
|
||||
"Si": 0, "O.co2": 4.5
|
||||
}
|
||||
514
pdb2pqr/pdb2pqr/ligand/mol2.py
Normal file
514
pdb2pqr/pdb2pqr/ligand/mol2.py
Normal file
@@ -0,0 +1,514 @@
|
||||
"""Support molecules in Tripos MOL2 format.
|
||||
|
||||
For further information look at (web page exists: 25 August 2005):
|
||||
http://www.tripos.com/index.php?family=modules,SimplePage,,,&page=sup_mol2&s=0
|
||||
"""
|
||||
import logging
|
||||
from collections import OrderedDict
|
||||
from itertools import combinations
|
||||
from numpy import array
|
||||
from numpy.linalg import norm
|
||||
from . import peoe
|
||||
from . import VALENCE_BY_ELEMENT, NONBONDED_BY_TYPE
|
||||
from . import RADII
|
||||
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
# These are the allowed bond types
|
||||
BOND_TYPES = {"single", "double", "triple", "aromatic"}
|
||||
# This is the maximum deviation from an ideal bond distance
|
||||
BOND_DIST = 2.0
|
||||
|
||||
|
||||
class Mol2Bond:
|
||||
"""MOL2 molecule bonds."""
|
||||
def __init__(self, atom1, atom2, bond_type, bond_id=0):
|
||||
"""Initialize bond.
|
||||
|
||||
Args:
|
||||
atom1: name of first atom in bond
|
||||
atom2: name of second atom in bond
|
||||
bond_type: type of bond: 1 (single), 2 (double), or ar (aromatic)
|
||||
bond_id: integer ID of bond
|
||||
"""
|
||||
self.atoms = (atom1, atom2)
|
||||
self.bond_id = int(bond_id)
|
||||
if bond_type in BOND_TYPES:
|
||||
self.type = bond_type
|
||||
else:
|
||||
err = "Unknown bond type: %s" % bond_type
|
||||
raise ValueError(err)
|
||||
|
||||
@property
|
||||
def atom_names(self):
|
||||
"""Return tuple with names of atoms in bond."""
|
||||
return (self.atoms[0].name, self.atoms[1].name)
|
||||
|
||||
@property
|
||||
def length(self):
|
||||
"""Return bond length."""
|
||||
return self.atoms[0].distance(self.atoms[1])
|
||||
|
||||
def __str__(self):
|
||||
fmt = "{b.atoms[0].name:s} {b.type:s}-bonded to {b.atoms[1].name:s}"
|
||||
return fmt.format(b=self)
|
||||
|
||||
class Mol2Atom:
|
||||
"""MOL2 molecule atoms."""
|
||||
def __init__(self):
|
||||
self.serial = None
|
||||
self.name = None
|
||||
self.alt_loc = None
|
||||
self.res_name = None
|
||||
self.chain_id = None
|
||||
self.res_seq = None
|
||||
self.x = None
|
||||
self.y = None
|
||||
self.z = None
|
||||
self.type = None
|
||||
self.radius = None
|
||||
self.is_c_term = False
|
||||
self.is_n_term = False
|
||||
self.mol2charge = None
|
||||
self.occupancy = 0.00
|
||||
self.temp_factor = 0.00
|
||||
self.seg_id = None
|
||||
self.charge = None
|
||||
self.num_rings = 0
|
||||
self.radius = None
|
||||
self.bonded_atoms = []
|
||||
self.bonds = []
|
||||
self.torsions = []
|
||||
self.rings = []
|
||||
# Terms for calculating atom electronegativity
|
||||
self.poly_terms = None
|
||||
# Atom electronegativity
|
||||
self.chi = None
|
||||
# Atom charge change during equilibration
|
||||
self.delta_charge = None
|
||||
|
||||
def distance(self, other):
|
||||
"""Get distance between two atoms.
|
||||
|
||||
Args:
|
||||
other: other atom object
|
||||
Returns:
|
||||
float with distance
|
||||
"""
|
||||
return norm(other.coords - self.coords)
|
||||
|
||||
def __str__(self):
|
||||
"""Generate PDB line from MOL2."""
|
||||
pdb_fmt = (
|
||||
"HETATM{a.serial:5d}{a.name:>5s}{a.res_name:>4s} L"
|
||||
"{a.res_seq!s:>5s} {a.x:8.3f}{a.y:8.3f}{a.z:8.3f}"
|
||||
)
|
||||
return pdb_fmt.format(a=self)
|
||||
|
||||
def assign_radius(self, primary_dict, secondary_dict):
|
||||
"""Assign radius to atom.
|
||||
|
||||
TODO - it seems inconsistent that this function pulls radii from a
|
||||
dictionary and the protein routines use force field files.
|
||||
|
||||
Args:
|
||||
primary_dict: primary dictionary of radii indexed by atom type or
|
||||
element
|
||||
secondary_dict: backup dictionary for radii not found in primary
|
||||
dictionary
|
||||
"""
|
||||
radius = None
|
||||
for rdict in [primary_dict, secondary_dict]:
|
||||
if radius is not None:
|
||||
break
|
||||
for key in [self.type, self.element]:
|
||||
if key in rdict:
|
||||
radius = rdict[key]
|
||||
break
|
||||
if radius is not None:
|
||||
self.radius = radius
|
||||
else:
|
||||
err = (
|
||||
"Unable to find radius parameter for self of type {type} in "
|
||||
"radius dictionary: {ff}").format(
|
||||
type=self.type, ff=primary_dict)
|
||||
raise KeyError(err)
|
||||
|
||||
@property
|
||||
def coords(self):
|
||||
"""Return coordinates as numpy vector."""
|
||||
return array([self.x, self.y, self.z])
|
||||
|
||||
@property
|
||||
def bonded_atom_names(self):
|
||||
"""Return a list of bonded atom names."""
|
||||
return [a.name for a in self.bonded_atoms]
|
||||
|
||||
@property
|
||||
def num_bonded_heavy(self):
|
||||
"""Return the number of heavy atoms bonded to this atom."""
|
||||
return len([a for a in self.bonded_atoms if a.type != "H"])
|
||||
|
||||
@property
|
||||
def num_bonded_hydrogen(self):
|
||||
"""Return the number of hydrogen atoms bonded to this atom."""
|
||||
return len([a for a in self.bonded_atoms if a.type == "H"])
|
||||
|
||||
@property
|
||||
def element(self):
|
||||
"""Return a string with the element for this atom (uppercase)."""
|
||||
return self.type.split(".")[0].upper()
|
||||
|
||||
@property
|
||||
def bond_order(self):
|
||||
"""Return the total number of electrons in bonds with other atoms."""
|
||||
order = 0
|
||||
num_aromatic = 0
|
||||
for bond in self.bonds:
|
||||
if bond.type == "single":
|
||||
order += 1
|
||||
elif bond.type == "double":
|
||||
order += 2
|
||||
elif bond.type == "triple":
|
||||
order += 3
|
||||
elif bond.type == "aromatic":
|
||||
num_aromatic += 1
|
||||
else:
|
||||
err = "Unknown bond type: %s" % bond.type
|
||||
raise ValueError(err)
|
||||
if num_aromatic > 0:
|
||||
order = order + num_aromatic + 1
|
||||
return order
|
||||
|
||||
@property
|
||||
def formal_charge(self):
|
||||
"""Return an integer with the formal charge for this atom."""
|
||||
element = self.type.split(".")[0]
|
||||
valence = VALENCE_BY_ELEMENT[element]
|
||||
nonbonded = NONBONDED_BY_TYPE[self.type]
|
||||
bond_order = self.bond_order
|
||||
formal_charge = valence - nonbonded - bond_order
|
||||
if (self.type in ["N.pl3", "N.am"]) and (bond_order == 3) and (
|
||||
formal_charge != 0):
|
||||
# Planar nitrogen bond orders are not always correct in MOL2
|
||||
_LOGGER.warning("Correcting planar/amide bond order.")
|
||||
formal_charge = 0
|
||||
elif (self.type in ["N.ar"]) and (bond_order == 4) and (
|
||||
formal_charge != 0):
|
||||
# Aromatic nitrogen bond orders are not always correct in MOL2
|
||||
_LOGGER.warning("Correcting aromatic nitrogen bond order.")
|
||||
formal_charge = 0
|
||||
elif (self.type in ["C.ar"]) and (bond_order == 5) and (
|
||||
formal_charge != 0):
|
||||
# Aromatic carbon bond orders are not always correct in MOL2
|
||||
_LOGGER.warning("Correcting aromatic carbon bond order.")
|
||||
formal_charge = 0
|
||||
elif (self.type in ["O.co2"]) and (bond_order == 1) and (
|
||||
formal_charge != -0.5):
|
||||
# CO2 bond orders are hardly ever set correctly in MOL2
|
||||
formal_charge = -0.5
|
||||
elif (self.type in ["C.2"]) and (bond_order == 5) and (
|
||||
formal_charge == -1):
|
||||
# CO2 bond orders are hardly ever set correctly in MOL2
|
||||
formal_charge = 0
|
||||
elif (self.type in ["N.3"]) and (bond_order == 4) and (
|
||||
formal_charge == -1):
|
||||
# Tetravalent nitrogen atom types are sometimes wrong in MOL2
|
||||
_LOGGER.warning("Correcting ammonium atom type.")
|
||||
formal_charge = 1
|
||||
elif (self.type in ["O.3"]) and (bond_order == 1) and (
|
||||
formal_charge == 1):
|
||||
# Phosphate groups are sometimes confused in MOL2
|
||||
# Assign negative charge to first O.3 with bond order 1
|
||||
# attached to phosphorous
|
||||
elements = [a.type[0] for a in self.bonds[0].atoms]
|
||||
p_atom = self.bonds[0].atoms[elements.index("P")]
|
||||
_LOGGER.warning("Correcting phosphate bond order.")
|
||||
o_atoms = []
|
||||
for bond in p_atom.bonds:
|
||||
for atom in bond.atoms:
|
||||
if atom.type[0] == "O" and atom.bond_order == 1:
|
||||
o_atoms.append(atom.name)
|
||||
if o_atoms.index(self.name) == 0:
|
||||
formal_charge = -1
|
||||
else:
|
||||
formal_charge = 0
|
||||
return formal_charge
|
||||
|
||||
|
||||
class Mol2Molecule:
|
||||
"""Tripos MOL2 molecule"""
|
||||
def __init__(self):
|
||||
self.atoms = OrderedDict()
|
||||
self.bonds = []
|
||||
self.torsions = set()
|
||||
self.rings = set()
|
||||
self.serial = None
|
||||
self.name = None
|
||||
self.res_name = None
|
||||
self.res_seq = None
|
||||
|
||||
def assign_parameters(self, primary_dict=RADII["zap9"],
|
||||
secondary_dict=RADII["bondi"]):
|
||||
"""Assign charges and radii to atoms in molecule.
|
||||
|
||||
Args:
|
||||
primary_dict: primary dictionary of radii indexed by atom type or
|
||||
element
|
||||
secondary_dict: backup dictionary for radii not found in primary
|
||||
dictionary
|
||||
"""
|
||||
self.assign_radii(primary_dict, secondary_dict)
|
||||
self.assign_charges()
|
||||
|
||||
def assign_radii(self, primary_dict, secondary_dict):
|
||||
"""Assign radii to atoms in molecule.
|
||||
|
||||
Args:
|
||||
primary_dict: primary dictionary of radii indexed by atom type or
|
||||
element
|
||||
secondary_dict: backup dictionary for radii not found in primary
|
||||
dictionary
|
||||
"""
|
||||
for atom in self.atoms.values():
|
||||
atom.assign_radius(primary_dict, secondary_dict)
|
||||
|
||||
def assign_charges(self):
|
||||
"""Assign charges to atoms in molecule."""
|
||||
for atom in self.atoms.values():
|
||||
atom.charge = atom.formal_charge
|
||||
peoe.equilibrate(self.atoms.values())
|
||||
|
||||
def find_atom_torsions(self, start_atom):
|
||||
"""Set the torsion angles that start with this atom (name).
|
||||
|
||||
Args:
|
||||
start_atom: starting atom name
|
||||
Returns:
|
||||
list of 4-tuples containing atom names comprising torsions
|
||||
"""
|
||||
torsions = []
|
||||
for bonded1 in self.atoms[start_atom].bonded_atom_names:
|
||||
for bonded2 in self.atoms[bonded1].bonded_atom_names:
|
||||
if bonded2 == start_atom:
|
||||
continue
|
||||
for end_atom in self.atoms[bonded2].bonded_atom_names:
|
||||
if end_atom == bonded1:
|
||||
continue
|
||||
torsions.append((start_atom, bonded1, bonded2, end_atom))
|
||||
return torsions
|
||||
|
||||
def set_torsions(self):
|
||||
"""Set all torsions in molecule."""
|
||||
for atom_name, atom in self.atoms.items():
|
||||
atom.torsions = self.find_atom_torsions(atom_name)
|
||||
for torsion in atom.torsions:
|
||||
self.torsions.add(torsion)
|
||||
|
||||
@staticmethod
|
||||
def rotate_to_smallest(path):
|
||||
"""Rotate cycle path so that it begins with the smallest node.
|
||||
|
||||
This was borrowed from StackOverflow: https://j.mp/2AHaukj
|
||||
|
||||
Args:
|
||||
path: list of atom names
|
||||
Returns:
|
||||
rotated path (list)
|
||||
"""
|
||||
n = path.index(min(path))
|
||||
return path[n:]+path[:n]
|
||||
|
||||
def find_new_rings(self, path, rings, level=0):
|
||||
"""Find new rings in molecule.
|
||||
|
||||
This was borrowed from StackOverflow: https://j.mp/2AHaukj
|
||||
|
||||
Args:
|
||||
path: list of atom names
|
||||
rings: current list of rings
|
||||
level: recursion level
|
||||
Returns:
|
||||
new list of rings
|
||||
"""
|
||||
start_node = path[0]
|
||||
next_node = None
|
||||
sub_path = []
|
||||
for bond in self.bonds:
|
||||
atom1 = bond.atoms[0].name
|
||||
atom2 = bond.atoms[1].name
|
||||
if start_node in (atom1, atom2):
|
||||
if atom1 == start_node:
|
||||
next_node = atom2
|
||||
else:
|
||||
next_node = atom1
|
||||
if next_node not in path:
|
||||
sub_path = [next_node]
|
||||
sub_path.extend(path)
|
||||
rings = self.find_new_rings(sub_path, rings, level+1)
|
||||
elif len(path) > 2 and next_node == path[-1]:
|
||||
path_ = self.rotate_to_smallest(path)
|
||||
inv_path = tuple(self.rotate_to_smallest(path_[::-1]))
|
||||
path_ = tuple(path_)
|
||||
if (path_ not in rings) and (inv_path not in rings):
|
||||
rings.add(tuple(path_))
|
||||
return rings
|
||||
|
||||
def set_rings(self):
|
||||
"""Set all rings in molecule.
|
||||
|
||||
This was borrowed from StackOverflow: https://j.mp/2AHaukj
|
||||
"""
|
||||
self.rings = set()
|
||||
rings = set()
|
||||
# Generate all rings
|
||||
for bond in self.bonds:
|
||||
for atom_name in bond.atom_names:
|
||||
rings = self.find_new_rings([atom_name], rings)
|
||||
# Prune rings that are products of other rings
|
||||
# TODO - testing on molecules like phenalene shows that this is broken
|
||||
ring_sets = []
|
||||
for i in range(2, len(rings)+1):
|
||||
for combo in combinations(rings, i):
|
||||
ring_set = set().union(*combo)
|
||||
ring_sets.append(ring_set)
|
||||
for ring in rings:
|
||||
ring_set = set(ring)
|
||||
if ring_set in ring_sets:
|
||||
_LOGGER.debug("Fused ring: %s", ring)
|
||||
else:
|
||||
_LOGGER.debug("Unfused ring: %s", ring)
|
||||
self.rings.add(ring)
|
||||
for ring in self.rings:
|
||||
for atom in ring:
|
||||
self.atoms[atom].num_rings += 1
|
||||
|
||||
def read(self, mol2_file):
|
||||
"""Routines for reading MOL2 file.
|
||||
|
||||
Args:
|
||||
mol2_file: file-like object with MOL2 data.
|
||||
"""
|
||||
mol2_file = self.parse_atoms(mol2_file)
|
||||
mol2_file = self.parse_bonds(mol2_file)
|
||||
|
||||
def parse_atoms(self, mol2_file):
|
||||
"""Parse @<TRIPOS>ATOM section of file.
|
||||
|
||||
Args:
|
||||
mol2_file: file-like object with MOL2 data.
|
||||
Returns:
|
||||
file object advanced to bonds section
|
||||
Raises:
|
||||
ValueError for bad MOL2 ATOM lines
|
||||
TypeError for bad charge entries
|
||||
"""
|
||||
# Skip material before atoms section
|
||||
for line in mol2_file:
|
||||
if "@<TRIPOS>ATOM" in line:
|
||||
break
|
||||
_LOGGER.debug("Skipping: %s", line.strip())
|
||||
duplicates = set()
|
||||
for line in mol2_file:
|
||||
line = line.strip()
|
||||
if not line:
|
||||
continue
|
||||
if "@<TRIPOS>BOND" in line:
|
||||
break
|
||||
words = line.split()
|
||||
if len(words) < 8:
|
||||
err = "Bad entry in MOL2 file: %s" % line
|
||||
raise ValueError(err)
|
||||
atom = Mol2Atom()
|
||||
atom.name = words[1]
|
||||
atom_type = words[5]
|
||||
type_parts = atom_type.split(".")
|
||||
type_parts[0] = type_parts[0].capitalize()
|
||||
if len(type_parts) == 2:
|
||||
type_parts[1] = type_parts[1].lower()
|
||||
elif len(type_parts) > 2:
|
||||
err = "Invalid atom type: %s" % atom_type
|
||||
raise ValueError(err)
|
||||
atom.type = ".".join(type_parts)
|
||||
atom.chain_id = "L"
|
||||
try:
|
||||
atom.serial = int(words[0])
|
||||
atom.res_name = words[7][:4]
|
||||
atom.res_seq = int(words[6])
|
||||
atom.x = float(words[2])
|
||||
atom.y = float(words[3])
|
||||
atom.z = float(words[4])
|
||||
except ValueError as exc:
|
||||
err = "Error (%s) parsing atom line: %s" % (exc, line)
|
||||
raise ValueError(err)
|
||||
if len(line) > 8:
|
||||
try:
|
||||
atom.mol2charge = float(words[8])
|
||||
except TypeError:
|
||||
err = "Unable to parse %s as charge in atom line: %s" % (
|
||||
words[8], line)
|
||||
_LOGGER.warning(err)
|
||||
if atom.name in self.atoms:
|
||||
duplicates.add(atom.name)
|
||||
else:
|
||||
self.atoms[atom.name] = atom
|
||||
if len(duplicates) > 0:
|
||||
raise KeyError(
|
||||
"Found duplicate atoms names in MOL2 file: %s" % duplicates)
|
||||
return mol2_file
|
||||
|
||||
def parse_bonds(self, mol2_file):
|
||||
"""Parse @<TRIPOS>BOND section of file.
|
||||
|
||||
Atoms must already have been parsed.
|
||||
Also sets up torsions and rings.
|
||||
|
||||
Args:
|
||||
mol2_file: file-like object with MOL2 data.
|
||||
Returns:
|
||||
file object advanced to SUBSTRUCTURE section
|
||||
"""
|
||||
atom_names = list(self.atoms.keys())
|
||||
for line in mol2_file:
|
||||
line = line.strip()
|
||||
if not line:
|
||||
continue
|
||||
if "@<TRIPOS>SUBSTRUCTURE" in line:
|
||||
break
|
||||
words = line.split()
|
||||
if len(words) < 4:
|
||||
err = "Bond line too short: %s" % line
|
||||
raise ValueError(err)
|
||||
bond_type = words[3]
|
||||
if bond_type == "1":
|
||||
bond_type = "single"
|
||||
elif bond_type == "2":
|
||||
bond_type = "double"
|
||||
elif bond_type == "3":
|
||||
bond_type = "triple"
|
||||
elif bond_type == "ar":
|
||||
bond_type = "aromatic"
|
||||
else:
|
||||
err = "Unknown bond type: %s" % bond_type
|
||||
raise ValueError(err)
|
||||
bond_id = int(words[0])
|
||||
atom_id1 = int(words[1])
|
||||
atom_id2 = int(words[2])
|
||||
atom_name1 = atom_names[atom_id1-1]
|
||||
atom1 = self.atoms[atom_name1]
|
||||
atom_name2 = atom_names[atom_id2-1]
|
||||
atom2 = self.atoms[atom_name2]
|
||||
bond = Mol2Bond(
|
||||
atom1=atom1, atom2=atom2, bond_type=bond_type, bond_id=bond_id)
|
||||
atom1.bonds.append(bond)
|
||||
atom1.bonded_atom_names.append(atom_name2)
|
||||
atom1.bonded_atoms.append(atom2)
|
||||
atom2.bonds.append(bond)
|
||||
atom2.bonded_atom_names.append(atom_name1)
|
||||
atom2.bonded_atoms.append(atom1)
|
||||
self.bonds.append(bond)
|
||||
self.set_torsions()
|
||||
self.set_rings()
|
||||
return mol2_file
|
||||
176
pdb2pqr/pdb2pqr/ligand/peoe.py
Normal file
176
pdb2pqr/pdb2pqr/ligand/peoe.py
Normal file
@@ -0,0 +1,176 @@
|
||||
"""Implements the PEOE method described in:
|
||||
|
||||
Paul Czodrowski Ingo Dramburg Christoph A. Sotriffer Gerhard Klebe.
|
||||
Development, validation, and application of adapted PEOE charges to estimate
|
||||
pKa values of functional groups in protein–ligand complexes.
|
||||
Proteins, 65, 424-437, 2006.
|
||||
https://doi.org/10.1002/prot.21110
|
||||
"""
|
||||
import logging
|
||||
from math import isclose
|
||||
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
# The terms of the third-order polynomial fit for the electronegativity.
|
||||
# See https://doi.org/10.1002/prot.21110 for more information.
|
||||
# NOTE - this data has no meaning outside of this module; do not move.
|
||||
POLY_TERMS = {
|
||||
'H': (7.17, 6.24, -0.56, 12.85),
|
||||
'C.3': (7.98, 9.18, 1.88, 19.04),
|
||||
'C.CAT': (7.98, 9.18, 1.88, 19.04),
|
||||
'C.2': (8.79 + 0.5, 9.32, 1.51, 19.62),
|
||||
'C.AR': (7.98 + 0.55, 9.18, 1.88, 19.04),
|
||||
'C.1': (10.39, 9.45, 0.73, 20.57),
|
||||
'N.3': (11.54 + 6.0, 10.28, 1.36, 28.00),
|
||||
'N.4': (11.54 + 6.0, 10.28, 1.36, 28.00),
|
||||
'N.AR': (12.87 - 1.29, 11.15, 0.85, 24.87),
|
||||
'N.2': (12.87, 11.15, 0.85, 24.87),
|
||||
'N.PL3': (12.87 + 0.5, 11.15, 0.85, 24.87),
|
||||
'N.AM': (12.87 + 3.5, 11.15, 0.85, 24.87),
|
||||
'N.1': (15.68, 11.70, -0.27, 27.11),
|
||||
'O.OH': (14.18 + 0.8, 12.92, 1.39, 28.49),
|
||||
'O.3': (14.18 - 3.1, 12.92, 1.39, 28.49),
|
||||
'O.2': (14.18, 12.92, 1.39, 28.49),
|
||||
'O.CO2': (15.25, 13.79, 0.47, 31.33),
|
||||
'F': (12.36, 13.85, 2.31, 30.82),
|
||||
'CL': (9.38 + 1.0, 9.69, 1.35, 22.04),
|
||||
'BR': (10.08 + 0.8, 8.47, 1.16, 19.71),
|
||||
'I': (9.90 + 1.0, 7.96, 0.96, 18.82),
|
||||
'S.3': (10.13 + 0.5, 9.13, 1.38, 20.65),
|
||||
'S.2': (10.13 + 0.5, 9.13, 1.38, 20.65),
|
||||
'S.O2': (10.13 + 0.5, 9.13, 1.38, 20.65),
|
||||
'P.3': (10.13 + 0.5, 9.13, 1.38, 20.65)
|
||||
}
|
||||
# Maximum (absolute) value of charge after which contribution to polynomial
|
||||
# is capped
|
||||
MAX_CHARGE = 1.1
|
||||
DEFAULT_H_ELECTRONEG = 20.02
|
||||
DEFAULT_H_CHARGE = 1.0
|
||||
# These next values are from the "Adaptation of the PEOE Procedure" section of
|
||||
# https://doi.org/10.1002/prot.21110.
|
||||
DAMPING_FACTOR = 0.778
|
||||
SCALING_FACTOR = 1.56
|
||||
NUM_CYCLES = 6
|
||||
|
||||
|
||||
def electronegativity(charge, poly_terms, atom_type):
|
||||
"""Calculate the electronegativity.
|
||||
|
||||
Calculation is based on a third-order polynomial in the atomic charge as
|
||||
described in Equation 2 of https://doi.org/10.1002/prot.21110.
|
||||
|
||||
Args:
|
||||
charge: charge of atom
|
||||
poly_terms: polynomial terms ordered from 0th- to 3rd-order
|
||||
atom_type: string with atom type
|
||||
Returns:
|
||||
electronegativity value
|
||||
Raises:
|
||||
IndexError if incorrect number of poly_terms given
|
||||
"""
|
||||
chi = None
|
||||
if abs(charge) > MAX_CHARGE:
|
||||
if charge < 0:
|
||||
charge = -1.0 * MAX_CHARGE
|
||||
else:
|
||||
charge = MAX_CHARGE
|
||||
if (atom_type == "H") and isclose(charge, DEFAULT_H_CHARGE):
|
||||
chi = DEFAULT_H_ELECTRONEG
|
||||
else:
|
||||
if len(poly_terms) == 4:
|
||||
chi = (
|
||||
poly_terms[0] + poly_terms[1]*charge
|
||||
+ poly_terms[2]*charge*charge
|
||||
+ poly_terms[3]*charge*charge*charge)
|
||||
elif len(poly_terms) == 3:
|
||||
chi = (
|
||||
poly_terms[0] + poly_terms[1]*charge
|
||||
+ poly_terms[2]*charge*charge
|
||||
)
|
||||
else:
|
||||
err = "Cannot parse length-%d polynomial" % len(poly_terms)
|
||||
raise IndexError(err)
|
||||
return chi
|
||||
|
||||
|
||||
def assign_terms(atoms, term_dict):
|
||||
"""Assign polynomial terms to each atom.
|
||||
|
||||
Args:
|
||||
atoms: list of Mol2Atom atoms
|
||||
term_dict: dictionary of polynomial terms
|
||||
Returns:
|
||||
modified list of atoms
|
||||
"""
|
||||
for atom in atoms:
|
||||
atom_type = atom.type.upper()
|
||||
if atom_type == 'O.3':
|
||||
atom_type = 'O.OH'
|
||||
try:
|
||||
atom.poly_terms = term_dict[atom_type]
|
||||
except KeyError:
|
||||
raise KeyError(
|
||||
"Unable to find polynomial terms for atom type %s" % atom_type)
|
||||
return atoms
|
||||
|
||||
|
||||
def equilibrate(atoms, damp=DAMPING_FACTOR, scale=SCALING_FACTOR,
|
||||
num_cycles=NUM_CYCLES, term_dict=POLY_TERMS):
|
||||
"""Equilibrate the atomic charges.
|
||||
|
||||
Args:
|
||||
atoms: list of Mol2Atom atoms to equilibrate
|
||||
damp: damping factor for equilibration process
|
||||
scale: scaling factor for equilibration process
|
||||
num_cycles: number of PEOE cycles
|
||||
term_dict: dictionary of polynomial terms
|
||||
Returns:
|
||||
revised list of atoms
|
||||
"""
|
||||
atoms = assign_terms(atoms, term_dict)
|
||||
# Reset or accumulate charges
|
||||
abs_qges = 0.0
|
||||
for atom in atoms:
|
||||
if isclose(atom.charge, 0.0):
|
||||
atom.equil_formal_charge = 0.0
|
||||
else:
|
||||
# PEOE multiples all atoms by a scaling factor at the end to account
|
||||
# for increased polarizability. The initial formal charge needs to
|
||||
# be reduced to account for this scaling.
|
||||
atom.equil_formal_charge = atom.charge*(1.0/scale)
|
||||
abs_qges += abs(atom.charge)
|
||||
atom.charge = 0
|
||||
|
||||
# A finite number of cycles is used to prevent complete equilibration of the
|
||||
# molecule. I'm not sure why this is a good idea but people have been doing
|
||||
# it since the original 1978 Tetrahedron paper with Gasteiger & Marsili
|
||||
for icycle in range(num_cycles):
|
||||
for atom1 in atoms:
|
||||
chi1 = electronegativity(
|
||||
atom1.charge, atom1.poly_terms, atom1.type)
|
||||
atom1.delta_charge = 0.0
|
||||
for atom2 in atom1.bonded_atoms:
|
||||
chi2 = electronegativity(
|
||||
atom2.charge, atom2.poly_terms, atom2.type)
|
||||
chi_diff = chi2 - chi1
|
||||
if chi2 > chi1:
|
||||
chi_norm = electronegativity(
|
||||
+1, atom1.poly_terms, atom1.type)
|
||||
else:
|
||||
chi_norm = electronegativity(
|
||||
+1, atom2.poly_terms, atom2.type)
|
||||
# Damping is used in PEOE to accelerate convergence
|
||||
atom1.delta_charge += (
|
||||
(chi_diff/chi_norm)*(damp**(icycle+1)))
|
||||
for atom in atoms:
|
||||
if isclose(abs_qges, 0.0):
|
||||
atom.charge += atom.delta_charge
|
||||
else:
|
||||
atom.charge += (
|
||||
atom.delta_charge
|
||||
+ (1.0/num_cycles) * atom.equil_formal_charge)
|
||||
for atom in atoms:
|
||||
atom.charge = scale * atom.charge
|
||||
return atoms
|
||||
20
pdb2pqr/pdb2pqr/ligand/topology.py
Normal file
20
pdb2pqr/pdb2pqr/ligand/topology.py
Normal file
@@ -0,0 +1,20 @@
|
||||
"""Ligand topology classes."""
|
||||
import logging
|
||||
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
class Topology:
|
||||
"""Ligand topology class."""
|
||||
|
||||
def __init__(self, molecule):
|
||||
"""Initialize with molecule.
|
||||
|
||||
Args:
|
||||
molecule: Mol2Molecule object
|
||||
"""
|
||||
self.atom_dict = {}
|
||||
for atom in molecule.atoms:
|
||||
self.atom_dict[atom.name] = atom
|
||||
raise NotImplementedError()
|
||||
@@ -9,6 +9,7 @@ import argparse
|
||||
from collections import OrderedDict
|
||||
from tempfile import NamedTemporaryFile
|
||||
from pathlib import Path
|
||||
from math import isclose
|
||||
import pandas
|
||||
import propka.lib
|
||||
from propka.parameters import Parameters
|
||||
@@ -20,6 +21,8 @@ from . import hydrogens
|
||||
from . import forcefield
|
||||
from . import protein as prot
|
||||
from . import input_output as io
|
||||
from .ligand.mol2 import Mol2Molecule
|
||||
from . import input_output as io
|
||||
from .config import VERSION, TITLE_FORMAT_STRING, CITATIONS, FORCE_FIELDS
|
||||
from .config import REPAIR_LIMIT
|
||||
|
||||
@@ -28,6 +31,10 @@ _LOGGER = logging.getLogger("PDB2PQR%s" % VERSION)
|
||||
_LOGGER.addFilter(io.DuplicateFilter())
|
||||
|
||||
|
||||
# Round-off error when determining if charge is integral
|
||||
CHARGE_ERROR = 1e-3
|
||||
|
||||
|
||||
def build_parser():
|
||||
"""Build an argument parser.
|
||||
|
||||
@@ -261,13 +268,12 @@ def setup_molecule(pdblist, definition, ligand_path):
|
||||
ligand: ligand object (may be None)
|
||||
"""
|
||||
if ligand_path is not None:
|
||||
ligand = Mol2Molecule()
|
||||
with open(ligand_path, "rt", encoding="utf-8") as ligand_file:
|
||||
raise NotImplementedError("Ligand functionality is temporarily disabled.")
|
||||
# TODO - check to see if ligff updates copy of definition stored with protein
|
||||
# protein, definition, ligand = ligff.initialize(definition, ligand_file, pdblist)
|
||||
ligand.read(ligand_file)
|
||||
else:
|
||||
protein = prot.Protein(pdblist, definition)
|
||||
ligand = None
|
||||
protein = prot.Protein(pdblist, definition)
|
||||
_LOGGER.info("Created protein object with %d residues and %d atoms.",
|
||||
len(protein.residues), len(protein.atoms))
|
||||
for residue in protein.residues:
|
||||
@@ -371,7 +377,7 @@ def run_propka(args, protein):
|
||||
molecule.calculate_pka()
|
||||
|
||||
pka_filename = Path(pdb_path).stem + ".pka"
|
||||
molecule.write_pka(filename = pka_filename)
|
||||
molecule.write_pka(filename=pka_filename)
|
||||
|
||||
conformation = molecule.conformations["AVR"]
|
||||
rows = []
|
||||
@@ -395,13 +401,14 @@ def run_propka(args, protein):
|
||||
return df, pka_filename
|
||||
|
||||
|
||||
def non_trivial(args, protein, definition, is_cif):
|
||||
def non_trivial(args, protein, ligand, definition, is_cif):
|
||||
"""Perform a non-trivial PDB2PQR run.
|
||||
|
||||
Args:
|
||||
args: argparse namespace.
|
||||
protein: Protein object. This is not actually specific to proteins...
|
||||
Nucleic acids are biomolecules, too!
|
||||
ligand: Mol2Molecule object or None
|
||||
definition: Definition object for topology.
|
||||
is_cif: Boolean indicating whether file is CIF format.
|
||||
Returns:
|
||||
@@ -469,7 +476,38 @@ def non_trivial(args, protein, definition, is_cif):
|
||||
|
||||
if args.ligand is not None:
|
||||
_LOGGER.info("Processing ligand.")
|
||||
raise NotImplementedError("Ligand support not implemented.")
|
||||
_LOGGER.warning("Using ZAP9 forcefield for ligand radii.")
|
||||
ligand.assign_parameters()
|
||||
missing_atoms = []
|
||||
lig_atoms = []
|
||||
for residue in protein.residues:
|
||||
tot_charge = 0
|
||||
for pdb_atom in residue.atoms:
|
||||
# Only check residues with HETATM
|
||||
if pdb_atom.type == "ATOM":
|
||||
break
|
||||
try:
|
||||
mol2_atom = ligand.atoms[pdb_atom.name]
|
||||
pdb_atom.radius = mol2_atom.radius
|
||||
pdb_atom.ffcharge = mol2_atom.charge
|
||||
tot_charge += mol2_atom.charge
|
||||
lig_atoms.append(pdb_atom)
|
||||
except KeyError:
|
||||
err = (
|
||||
"Can't find HETATM {r.name} {r.res_seq} {a.name} "
|
||||
"in MOL2 file").format(r=residue, a=pdb_atom)
|
||||
_LOGGER.warning(err)
|
||||
missing_atoms.append(pdb_atom)
|
||||
|
||||
matched_atoms = hitlist + lig_atoms
|
||||
|
||||
for residue in protein.residues:
|
||||
if not isclose(
|
||||
residue.charge, int(residue.charge), abs_tol=CHARGE_ERROR):
|
||||
err = (
|
||||
"Residue {r.name} {r.res_seq} charge is "
|
||||
"non-integer: {r.charge}").format(r=residue)
|
||||
raise ValueError(err)
|
||||
|
||||
if args.ffout is not None:
|
||||
_LOGGER.info("Applying custom naming scheme (%s).", args.ffout)
|
||||
@@ -482,18 +520,19 @@ def non_trivial(args, protein, definition, is_cif):
|
||||
_LOGGER.info("Regenerating headers.")
|
||||
reslist, charge = protein.charge
|
||||
if is_cif:
|
||||
header = io.print_pqr_header_cif(misslist, reslist, charge, args.ff,
|
||||
args.pka_method, args.ph, args.ffout,
|
||||
include_old_header=args.include_header)
|
||||
header = io.print_pqr_header_cif(
|
||||
missing_atoms, reslist, charge, args.ff, args.pka_method, args.ph,
|
||||
args.ffout, include_old_header=args.include_header)
|
||||
else:
|
||||
header = io.print_pqr_header(protein.pdblist, misslist, reslist, charge,
|
||||
args.ff, args.pka_method, args.ph, args.ffout,
|
||||
include_old_header=args.include_header)
|
||||
header = io.print_pqr_header(
|
||||
protein.pdblist, missing_atoms, reslist, charge, args.ff,
|
||||
args.pka_method, args.ph, args.ffout,
|
||||
include_old_header=args.include_header)
|
||||
|
||||
_LOGGER.info("Regenerating PDB lines.")
|
||||
lines = io.print_protein_atoms(hitlist, args.keep_chain)
|
||||
lines = io.print_protein_atoms(matched_atoms, args.keep_chain)
|
||||
|
||||
return {"lines": lines, "header": header, "missed_residues": misslist}
|
||||
return {"lines": lines, "header": header, "missed_residues": missing_atoms}
|
||||
|
||||
|
||||
def main(args):
|
||||
@@ -534,8 +573,9 @@ def main(args):
|
||||
results = {"header": "", "missed_residues": None, "protein": protein,
|
||||
"lines": io.print_protein_atoms(protein.atoms, args.keep_chain)}
|
||||
else:
|
||||
results = non_trivial(args=args, protein=protein, definition=definition,
|
||||
is_cif=is_cif)
|
||||
results = non_trivial(
|
||||
args=args, protein=protein, ligand=ligand, definition=definition,
|
||||
is_cif=is_cif)
|
||||
|
||||
print_pqr(args=args, pqr_lines=results["lines"], header_lines=results["header"],
|
||||
missing_lines=results["missed_residues"], is_cif=is_cif)
|
||||
|
||||
@@ -7,7 +7,6 @@ the classes is taken directly from the above PDB Format Description.
|
||||
|
||||
Authors: Todd Dolinsky, Yong Huang
|
||||
"""
|
||||
import copy
|
||||
import logging
|
||||
|
||||
|
||||
@@ -448,151 +447,6 @@ class HETATM(BaseRecord):
|
||||
self.charge = ""
|
||||
|
||||
|
||||
class MOL2BOND(object):
|
||||
"""Bonding of MOL2 files"""
|
||||
def __init__(self, frm, to, type_, bond_id=0):
|
||||
self.bond_to_self = to # bond to this atom
|
||||
self.bond_from_self = frm # bond from atom
|
||||
self.type = type_ # 1=single, 2=double, ar=aromatic
|
||||
self.bond_id = bond_id # bond_id
|
||||
|
||||
|
||||
class Mol2Molecule(object):
|
||||
"""Tripos MOL2 molecule
|
||||
|
||||
For further information look at (web page exists: 25 August 2005):
|
||||
http://www.tripos.com/index.php?family=modules,SimplePage,,,&page=sup_mol2&s=0
|
||||
"""
|
||||
def __init__(self):
|
||||
self.l_atoms = [] # all atoms of class <ATOM>
|
||||
self.l_bonds = [] # all bonds of class <BOND>
|
||||
self.l_pdb_atoms = [] # PDB-like list of all atoms
|
||||
self.serial = None
|
||||
self.name = None
|
||||
self.res_name = None
|
||||
self.res_seq = None
|
||||
self.x = None
|
||||
self.y = None
|
||||
self.z = None
|
||||
|
||||
def read(self, file_):
|
||||
"""Routines for reading MOL2 file"""
|
||||
data = file_.read()
|
||||
data = data.replace("\r\n", "\n")
|
||||
data = data.replace("\r", "\n")
|
||||
|
||||
# ATOM section
|
||||
start = data.find("@<TRIPOS>ATOM")
|
||||
stop = data.find("@<TRIPOS>BOND")
|
||||
|
||||
# Do some error checking
|
||||
if start == -1:
|
||||
raise ValueError("Unable to find '@<TRIPOS>ATOM' in MOL2 file!")
|
||||
elif stop == -1:
|
||||
raise ValueError("Unable to find '@<TRIPOS>BOND' in MOL2 file!")
|
||||
|
||||
atoms = data[start+14:stop-2].split("\n")
|
||||
# BOND section
|
||||
start = data.find("@<TRIPOS>BOND")
|
||||
stop = data.find("@<TRIPOS>SUBSTRUCTURE")
|
||||
|
||||
# More error checking
|
||||
if stop == -1:
|
||||
raise ValueError("Unable to find '@<TRIPOS>SUBSTRUCTURE' in MOL2 file!")
|
||||
|
||||
bonds = data[start+14:stop-1].split("\n")
|
||||
self.parse_atoms(atoms)
|
||||
self.parse_bonds(bonds)
|
||||
self.createl_bonded_atoms()
|
||||
#self.create_pdb_line_from_mol2(atoms)
|
||||
|
||||
def parse_atoms(self, atom_list):
|
||||
"""For parsing @<TRIPOS>ATOM"""
|
||||
for atom_line in atom_list:
|
||||
separated_atom_line = atom_line.split()
|
||||
|
||||
# Special handling for blank lines
|
||||
if len(separated_atom_line) == 0:
|
||||
continue
|
||||
|
||||
# Error checking
|
||||
if len(separated_atom_line) < 8:
|
||||
raise ValueError("Bad atom entry in MOL2 file: %s" % atom_line)
|
||||
|
||||
fake_record = "HETATM"
|
||||
fake_chain = " L"
|
||||
|
||||
try:
|
||||
mol2pdb = '%s%5i%5s%4s%2s%4i %8.3f%8.3f%8.3f' % \
|
||||
(fake_record, int(separated_atom_line[0]),
|
||||
separated_atom_line[1], separated_atom_line[7][:4],
|
||||
fake_chain, int(separated_atom_line[6]),
|
||||
float(separated_atom_line[2]), float(separated_atom_line[3]),
|
||||
float(separated_atom_line[4]))
|
||||
|
||||
except ValueError:
|
||||
raise ValueError("Bad atom entry in MOL2 file: %s" % atom_line)
|
||||
|
||||
this_atom = HETATM(mol2pdb, separated_atom_line[5], [], [])
|
||||
if len(separated_atom_line) > 8:
|
||||
charge = separated_atom_line[8]
|
||||
try:
|
||||
this_atom.mol2charge = float(charge)
|
||||
except TypeError:
|
||||
_LOGGER.warning('Warning. Non-float charge (%s) in mol2 file.', charge)
|
||||
this_atom.mol2charge = None
|
||||
self.l_pdb_atoms.append(mol2pdb)
|
||||
self.l_atoms.append(this_atom)
|
||||
|
||||
def parse_bonds(self, bond_list):
|
||||
"""For parsing @<TRIPOS>BOND"""
|
||||
for bond_line in bond_list:
|
||||
separated_bond_line = bond_line.split()
|
||||
# Special handling for blank lines
|
||||
if len(separated_bond_line) == 0:
|
||||
continue
|
||||
if len(separated_bond_line) < 4:
|
||||
raise ValueError("Bad bond entry in MOL2 file: %s" % bond_line)
|
||||
try:
|
||||
this_bond = MOL2BOND(
|
||||
int(separated_bond_line[1]), # bond frm
|
||||
int(separated_bond_line[2]), # bond to
|
||||
separated_bond_line[3], # bond type
|
||||
int(separated_bond_line[0]) # bond id
|
||||
)
|
||||
except ValueError:
|
||||
raise ValueError("Bad bond entry in MOL2 file: %s" % bond_line)
|
||||
self.l_bonds.append(this_bond)
|
||||
|
||||
def createl_bonded_atoms(self):
|
||||
"""Creates for each atom a list of the bonded Atoms
|
||||
|
||||
This becomes one attribute of MOL2ATOM!
|
||||
"""
|
||||
for bond in self.l_bonds:
|
||||
self.l_atoms[bond.bond_from_self-1].l_bonded_atoms\
|
||||
.append(self.l_atoms[bond.bond_to_self-1])
|
||||
|
||||
self.l_atoms[bond.bond_to_self-1].l_bonded_atoms\
|
||||
.append(self.l_atoms[bond.bond_from_self-1])
|
||||
|
||||
atbond = copy.deepcopy(bond)
|
||||
atbond.other_atom = self.l_atoms[bond.bond_to_self-1]
|
||||
self.l_atoms[bond.bond_from_self-1].l_bonds.append(atbond)
|
||||
|
||||
atbond = copy.deepcopy(bond)
|
||||
atbond.other_atom = self.l_atoms[bond.bond_from_self-1]
|
||||
self.l_atoms[bond.bond_to_self-1].l_bonds.append(atbond)
|
||||
|
||||
def create_pdb_line_from_mol2(self):
|
||||
"""Generate PDB line from MOL2."""
|
||||
fake_type = "HETATM"
|
||||
rstr = "%s%5i%5s%4s%2s%5s %8.3f%8.3f%8.3f\n" % (fake_type, self.serial,
|
||||
self.name, self.res_name, ' L',
|
||||
self.res_seq, self.x, self.y, self.z)
|
||||
return rstr
|
||||
|
||||
|
||||
@register_line_parser
|
||||
class ATOM(BaseRecord):
|
||||
""" ATOM class
|
||||
|
||||
@@ -14,56 +14,6 @@ from . import input_output as io
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
|
||||
|
||||
def run_propka_31(protein, pka_options):
|
||||
"""Run PROPKA 3.1 on the current protein, setting protonation states to
|
||||
the correct values. pH is set in pka_options
|
||||
|
||||
Parameters
|
||||
pka_options: Options for propKa 3.1, including pH
|
||||
|
||||
Returns
|
||||
pka_molecule: pKa's internal molecule object (including pKa's, etc)
|
||||
not_found: dict of residues found in pka_molecule but not in PDB2PQR (with pKa)
|
||||
"""
|
||||
# See https://github.com/jensengroup/propka-3.1/blob/master/scripts/propka31.py
|
||||
|
||||
ph = pka_options.ph
|
||||
_LOGGER.info("Running propka 3.1 at pH %.2f... ", ph)
|
||||
|
||||
# Initialize some variables
|
||||
pkadic = {}
|
||||
|
||||
# Reorder the atoms in each residue to start with N - TONI is this necessary?
|
||||
for residue in protein.residues:
|
||||
residue.reorder()
|
||||
|
||||
# TONI Make a string with all non-hydrogen atoms. Previously it was removing the "element"
|
||||
# column and hydrogens. This does not seem to be necessary in propKa 3.1 .
|
||||
with tempfile.NamedTemporaryFile(mode="w+", suffix=".pdb") as h_free_file:
|
||||
for atom in protein.atoms:
|
||||
if not atom.is_hydrogen:
|
||||
atomtxt = atom.get_pdb_string()
|
||||
h_free_file.write(atomtxt + '\n')
|
||||
|
||||
# Run PropKa 3.1 -------------
|
||||
# Creating protein object. Annoyingly, at this stage propka generates a
|
||||
# *.propka_input file in PWD and does not delete it (irrespective of the original
|
||||
# .pdb location)
|
||||
pka_molecule = propka.molecular_container.Molecular_container(h_free_file.name,
|
||||
pka_options)
|
||||
|
||||
# calculating pKa values for ionizable residues -
|
||||
pka_molecule.calculate_pka()
|
||||
|
||||
## pka_molecule.write_pka()
|
||||
for grp in pka_molecule.conformations['AVR'].groups:
|
||||
key = str.strip('%s %s %s' % (grp.residue_type, grp.atom.resNumb, grp.atom.chain_id))
|
||||
pkadic[key] = grp.pka_value
|
||||
|
||||
protein.pka_protein = pka_molecule
|
||||
return pkadic
|
||||
|
||||
|
||||
def run_pdb2pka(ph, force_field, pdb_list, ligand, pdb2pka_params):
|
||||
"""Run PDB2PKA"""
|
||||
# TODO - we are not ready to deal with PDB2PKA yet
|
||||
@@ -104,31 +54,10 @@ def run_pdb2pka(ph, force_field, pdb_list, ligand, pdb2pka_params):
|
||||
# protein.apply_pka_values(ff, ph, residue_ph)
|
||||
# _LOGGER.debug('Finished running PDB2PKA.')
|
||||
|
||||
|
||||
def run_propka(protein, ph, force_field, options, version=30):
|
||||
"""Run PROPKA on the current protein, setting protonation states to the correct values
|
||||
|
||||
Parameters
|
||||
ph: The desired pH of the system
|
||||
force_field: The forcefield name to be used
|
||||
outname: The name of the PQR outfile
|
||||
options: Options to propka
|
||||
version: may be 30 or 31 (uses external propka 3.1)
|
||||
"""
|
||||
_LOGGER.info("Running PROPKA v%d and applying at pH %.2f... ", version, ph)
|
||||
pkadic = self.run_propka_31(options)
|
||||
|
||||
if len(pkadic) == 0:
|
||||
raise ValueError("PROPKA returned empty results!")
|
||||
|
||||
# Now apply each pka to the appropriate residue
|
||||
protein.apply_pka_values(force_field, ph, pkadic)
|
||||
_LOGGER.debug("Done running PROPKA")
|
||||
|
||||
|
||||
# def run_pdb2pqr(pdblist, my_protein, my_definition, options, is_cif):
|
||||
def run_pdb2pqr(pdblist, my_protein, my_definition, options, is_cif):
|
||||
"""Run the PDB2PQR Suite"""
|
||||
raise DeprecationWarning("TODO - This function is deprecated")
|
||||
# """Run the PDB2PQR Suite
|
||||
|
||||
# Args:
|
||||
# pdblist: The list of objects that was read from the PDB file given as
|
||||
# input (list)
|
||||
|
||||
@@ -1,10 +1,14 @@
|
||||
#!/usr/bin/python3
|
||||
|
||||
"""
|
||||
The use of continuum solvation methods such as APBS requires accurate and complete structural data as well as force field parameters such as atomic charges and radii.
|
||||
Unfortunately, the limiting step in continuum electrostatics calculations is often the addition of missing atomic coordinates to molecular structures from the Protein
|
||||
Data Bank and the assignment of parameters to these structures. To adds this problem, we have developed PDB2PQR. This software automates many of the common tasks of
|
||||
preparing structures for continuum solvation calculations as well as many other types of biomolecular structure modeling, analysis, and simulation. These tasks include:
|
||||
The use of continuum solvation methods such as APBS requires accurate and complete
|
||||
structural data as well as force field parameters such as atomic charges and radii.
|
||||
Unfortunately, the limiting step in continuum electrostatics calculations is often
|
||||
the addition of missing atomic coordinates to molecular structures from the Protein
|
||||
Data Bank and the assignment of parameters to these structures. To adds this problem,
|
||||
we have developed PDB2PQR. This software automates many of the common tasks of
|
||||
preparing structures for continuum solvation calculations as well as many other types
|
||||
of biomolecular structure modeling, analysis, and simulation. These tasks include:
|
||||
|
||||
* Adding a limited number of missing heavy (non-hydrogen) atoms to biomolecular structures.
|
||||
* Estimating titration states and protonating biomolecules in a manner consistent with favorable hydrogen bonding.
|
||||
@@ -18,7 +22,7 @@ biomolecular solvation and electrostatics analyses to the biomedical community.
|
||||
import sys
|
||||
import setuptools
|
||||
|
||||
if sys.version_info[:2] < (3,6):
|
||||
if sys.version_info[:2] < (3, 6):
|
||||
raise RuntimeError("Python version >= 3.6 is required.")
|
||||
|
||||
with open("README.md", "r") as f:
|
||||
|
||||
@@ -62,32 +62,32 @@ USER_CHARGES
|
||||
54 H7 6.6440 6.0890 9.2580 H 1 UNK 0.000000
|
||||
55 H8 8.6070 6.6600 7.9340 H 1 UNK 0.000000
|
||||
56 H9 9.5090 5.1250 6.2510 H 1 UNK 0.000000
|
||||
57 1H10 4.9080 5.4400 10.2800 H 1 UNK 0.000000
|
||||
58 2H10 6.0650 4.2720 10.9200 H 1 UNK 0.000000
|
||||
59 1H12 2.3020 0.1560 10.2490 H 1 UNK 0.000000
|
||||
60 2H12 1.5120 1.7280 10.1470 H 1 UNK 0.000000
|
||||
57 H101 4.9080 5.4400 10.2800 H 1 UNK 0.000000
|
||||
58 H102 6.0650 4.2720 10.9200 H 1 UNK 0.000000
|
||||
59 H121 2.3020 0.1560 10.2490 H 1 UNK 0.000000
|
||||
60 H122 1.5120 1.7280 10.1470 H 1 UNK 0.000000
|
||||
61 H14 5.4270 -0.8780 13.7600 H 1 UNK 0.000000
|
||||
62 H15 3.6200 -0.2630 15.5740 H 1 UNK 0.000000
|
||||
63 1H16 7.4370 -0.0070 14.9100 H 1 UNK 0.000000
|
||||
64 2H16 6.7590 1.5900 14.9110 H 1 UNK 0.000000
|
||||
63 H161 7.4370 -0.0070 14.9100 H 1 UNK 0.000000
|
||||
64 H162 6.7590 1.5900 14.9110 H 1 UNK 0.000000
|
||||
65 H18 5.5970 -3.7540 17.5730 H 1 UNK 0.000000
|
||||
66 1H19 3.8610 -5.2070 17.1640 H 1 UNK 0.000000
|
||||
67 2H19 4.9340 -5.9150 15.9680 H 1 UNK 0.000000
|
||||
68 1H20 2.6870 -2.2030 15.7120 H 1 UNK 0.000000
|
||||
69 2H20 3.7050 -2.1860 14.2570 H 1 UNK 0.000000
|
||||
70 1H23 10.6090 -3.2990 15.2650 H 1 UNK 0.000000
|
||||
71 2H23 9.4700 -2.5590 16.3820 H 1 UNK 0.000000
|
||||
72 3H23 9.0370 -2.7940 14.6990 H 1 UNK 0.000000
|
||||
73 1H24 10.1130 -5.6140 14.2890 H 1 UNK 0.000000
|
||||
74 2H24 8.4540 -5.2410 13.8640 H 1 UNK 0.000000
|
||||
75 3H24 8.7950 -6.5820 14.9380 H 1 UNK 0.000000
|
||||
76 1H25 10.8970 -5.3850 16.6790 H 1 UNK 0.000000
|
||||
77 2H25 9.4870 -6.1170 17.4210 H 1 UNK 0.000000
|
||||
78 3H25 9.9560 -4.4740 17.8460 H 1 UNK 0.000000
|
||||
66 H191 3.8610 -5.2070 17.1640 H 1 UNK 0.000000
|
||||
67 H192 4.9340 -5.9150 15.9680 H 1 UNK 0.000000
|
||||
68 H201 2.6870 -2.2030 15.7120 H 1 UNK 0.000000
|
||||
69 H202 3.7050 -2.1860 14.2570 H 1 UNK 0.000000
|
||||
70 H231 10.6090 -3.2990 15.2650 H 1 UNK 0.000000
|
||||
71 H232 9.4700 -2.5590 16.3820 H 1 UNK 0.000000
|
||||
72 H233 9.0370 -2.7940 14.6990 H 1 UNK 0.000000
|
||||
73 H241 10.1130 -5.6140 14.2890 H 1 UNK 0.000000
|
||||
74 H242 8.4540 -5.2410 13.8640 H 1 UNK 0.000000
|
||||
75 H243 8.7950 -6.5820 14.9380 H 1 UNK 0.000000
|
||||
76 H251 10.8970 -5.3850 16.6790 H 1 UNK 0.000000
|
||||
77 H252 9.4870 -6.1170 17.4210 H 1 UNK 0.000000
|
||||
78 H253 9.9560 -4.4740 17.8460 H 1 UNK 0.000000
|
||||
79 H26 2.5370 2.2260 12.4440 H 1 UNK 0.000000
|
||||
80 1H27 -0.9880 1.9690 12.8550 H 1 UNK 0.000000
|
||||
81 2H27 -0.5410 2.3770 11.1910 H 1 UNK 0.000000
|
||||
82 3H27 0.5380 2.8110 12.5230 H 1 UNK 0.000000
|
||||
80 H271 -0.9880 1.9690 12.8550 H 1 UNK 0.000000
|
||||
81 H272 -0.5410 2.3770 11.1910 H 1 UNK 0.000000
|
||||
82 H273 0.5380 2.8110 12.5230 H 1 UNK 0.000000
|
||||
83 H29 6.9930 3.0000 12.9840 H 1 UNK 0.000000
|
||||
84 H30 7.9750 3.3650 10.7580 H 1 UNK 0.000000
|
||||
85 H31 8.8870 1.4780 9.4630 H 1 UNK 0.000000
|
||||
|
||||
39
pdb2pqr/tests/data/acetate.mol2
Normal file
39
pdb2pqr/tests/data/acetate.mol2
Normal file
@@ -0,0 +1,39 @@
|
||||
#
|
||||
#
|
||||
# This file was generated by PRODRG version AA180301.0717
|
||||
# PRODRG written/copyrighted by Daan van Aalten
|
||||
# and Alexander Schuettelkopf
|
||||
#
|
||||
# Questions/comments to dava@davapc1.bioch.dundee.ac.uk
|
||||
#
|
||||
# When using this software in a publication, cite:
|
||||
# A. W. Schuettelkopf and D. M. F. van Aalten (2004).
|
||||
# PRODRG - a tool for high-throughput crystallography
|
||||
# of protein-ligand complexes.
|
||||
# Acta Crystallogr. D60, 1355--1363.
|
||||
#
|
||||
#
|
||||
@<TRIPOS>MOLECULE
|
||||
DRG
|
||||
7 6 1
|
||||
SMALL
|
||||
USER_CHARGES
|
||||
|
||||
PRODRG MOLECULE
|
||||
@<TRIPOS>ATOM
|
||||
1 OAC -1.960 -3.920 10.330 O.co2 1 DRG -0.360
|
||||
2 CAB -2.270 -3.050 11.170 C.2 1 DRG 0.720
|
||||
3 OAD -2.300 -3.210 12.410 O.co2 1 DRG -0.360
|
||||
4 CAA -2.640 -1.670 10.630 C.3 1 DRG 0.000
|
||||
5 HAB -2.571 -1.675 9.542 H 1 DRG 0.000
|
||||
6 HAC -1.953 -0.926 11.034 H 1 DRG 0.000
|
||||
7 HAA -3.662 -1.496 10.966 H 1 DRG 0.000
|
||||
@<TRIPOS>BOND
|
||||
1 2 1 2
|
||||
2 2 3 2
|
||||
3 2 4 1
|
||||
4 4 5 1
|
||||
5 4 6 1
|
||||
6 4 7 1
|
||||
@<TRIPOS>SUBSTRUCTURE
|
||||
1 DRG 1
|
||||
37
pdb2pqr/tests/data/acetonitrile.mol2
Normal file
37
pdb2pqr/tests/data/acetonitrile.mol2
Normal file
@@ -0,0 +1,37 @@
|
||||
#
|
||||
#
|
||||
# This file was generated by PRODRG version AA180301.0717
|
||||
# PRODRG written/copyrighted by Daan van Aalten
|
||||
# and Alexander Schuettelkopf
|
||||
#
|
||||
# Questions/comments to dava@davapc1.bioch.dundee.ac.uk
|
||||
#
|
||||
# When using this software in a publication, cite:
|
||||
# A. W. Schuettelkopf and D. M. F. van Aalten (2004).
|
||||
# PRODRG - a tool for high-throughput crystallography
|
||||
# of protein-ligand complexes.
|
||||
# Acta Crystallogr. D60, 1355--1363.
|
||||
#
|
||||
#
|
||||
@<TRIPOS>MOLECULE
|
||||
DRG
|
||||
6 5 1
|
||||
SMALL
|
||||
USER_CHARGES
|
||||
|
||||
PRODRG MOLECULE
|
||||
@<TRIPOS>ATOM
|
||||
1 NAC 9.650 -0.320 4.310 N.1 1 DRG 0.000
|
||||
2 CAB 10.600 0.090 4.770 C.1 1 DRG 0.000
|
||||
3 CAA 11.840 0.630 5.370 C.3 1 DRG 0.000
|
||||
4 HAB 12.444 -0.191 5.757 H 1 DRG 0.000
|
||||
5 HAC 11.584 1.308 6.184 H 1 DRG 0.000
|
||||
6 HAA 12.352 1.154 4.563 H 1 DRG 0.000
|
||||
@<TRIPOS>BOND
|
||||
1 2 1 3
|
||||
2 2 3 1
|
||||
3 3 4 1
|
||||
4 3 5 1
|
||||
5 3 6 1
|
||||
@<TRIPOS>SUBSTRUCTURE
|
||||
1 DRG 1
|
||||
77
pdb2pqr/tests/data/acetylcholine.mol2
Normal file
77
pdb2pqr/tests/data/acetylcholine.mol2
Normal file
@@ -0,0 +1,77 @@
|
||||
#
|
||||
#
|
||||
# This file was generated by PRODRG version AA180301.0717
|
||||
# PRODRG written/copyrighted by Daan van Aalten
|
||||
# and Alexander Schuettelkopf
|
||||
#
|
||||
# Questions/comments to dava@davapc1.bioch.dundee.ac.uk
|
||||
#
|
||||
# When using this software in a publication, cite:
|
||||
# A. W. Schuettelkopf and D. M. F. van Aalten (2004).
|
||||
# PRODRG - a tool for high-throughput crystallography
|
||||
# of protein-ligand complexes.
|
||||
# Acta Crystallogr. D60, 1355--1363.
|
||||
#
|
||||
#
|
||||
@<TRIPOS>MOLECULE
|
||||
DRG
|
||||
26 25 1
|
||||
SMALL
|
||||
USER_CHARGES
|
||||
|
||||
PRODRG MOLECULE
|
||||
@<TRIPOS>ATOM
|
||||
1 CAI -3.690 -3.410 -6.100 C.3 1 DRG 0.000
|
||||
2 HAK -4.732 -3.177 -5.883 H 1 DRG 0.000
|
||||
3 HAL -3.540 -3.429 -7.179 H 1 DRG 0.000
|
||||
4 HAM -3.012 -2.708 -5.613 H 1 DRG 0.000
|
||||
5 CAH -3.340 -4.780 -5.510 C.2 1 DRG 0.425
|
||||
6 OAB -2.950 -5.690 -6.240 O.2 1 DRG -0.335
|
||||
7 OAG -3.500 -4.850 -4.150 O.3 1 DRG -0.315
|
||||
8 CAF -3.230 -6.130 -3.560 C.3 1 DRG 0.225
|
||||
9 HAI -2.175 -6.368 -3.699 H 1 DRG 0.000
|
||||
10 HAJ -3.903 -6.854 -4.021 H 1 DRG 0.000
|
||||
11 CAE -3.550 -6.140 -2.050 C.3 1 DRG 0.000
|
||||
12 HAG -3.023 -5.290 -1.615 H 1 DRG 0.000
|
||||
13 HAH -3.162 -7.090 -1.681 H 1 DRG 0.000
|
||||
14 NAD -4.950 -6.060 -1.570 N.3 1 DRG 0.000
|
||||
15 CAJ -5.850 -7.060 -2.180 C.3 1 DRG 0.000
|
||||
16 HAO -5.897 -6.898 -3.257 H 1 DRG 0.000
|
||||
17 HAP -6.848 -6.958 -1.753 H 1 DRG 0.000
|
||||
18 HAN -5.414 -8.030 -1.943 H 1 DRG 0.000
|
||||
19 CAA -5.530 -4.720 -1.750 C.3 1 DRG 0.000
|
||||
20 HAB -5.573 -4.482 -2.813 H 1 DRG 0.000
|
||||
21 HAC -4.910 -3.984 -1.238 H 1 DRG 0.000
|
||||
22 HAA -6.528 -4.771 -1.314 H 1 DRG 0.000
|
||||
23 CAC -4.920 -6.320 -0.120 C.3 1 DRG 0.000
|
||||
24 HAE -4.496 -7.307 0.064 H 1 DRG 0.000
|
||||
25 HAF -5.934 -6.281 0.277 H 1 DRG 0.000
|
||||
26 HAD -4.296 -5.534 0.306 H 1 DRG 0.000
|
||||
@<TRIPOS>BOND
|
||||
1 1 2 1
|
||||
2 1 3 1
|
||||
3 1 4 1
|
||||
4 5 1 1
|
||||
5 5 6 2
|
||||
6 5 7 1
|
||||
7 8 7 1
|
||||
8 8 9 1
|
||||
9 8 10 1
|
||||
10 8 11 1
|
||||
11 11 12 1
|
||||
12 11 13 1
|
||||
13 14 11 1
|
||||
14 14 15 1
|
||||
15 14 19 1
|
||||
16 14 23 1
|
||||
17 15 16 1
|
||||
18 15 17 1
|
||||
19 15 18 1
|
||||
20 19 20 1
|
||||
21 19 21 1
|
||||
22 19 22 1
|
||||
23 23 24 1
|
||||
24 23 25 1
|
||||
25 23 26 1
|
||||
@<TRIPOS>SUBSTRUCTURE
|
||||
1 DRG 1
|
||||
106
pdb2pqr/tests/data/adp.mol2
Normal file
106
pdb2pqr/tests/data/adp.mol2
Normal file
@@ -0,0 +1,106 @@
|
||||
#
|
||||
#
|
||||
# This file was generated by PRODRG version AA180301.0717
|
||||
# PRODRG written/copyrighted by Daan van Aalten
|
||||
# and Alexander Schuettelkopf
|
||||
#
|
||||
# Questions/comments to dava@davapc1.bioch.dundee.ac.uk
|
||||
#
|
||||
# When using this software in a publication, cite:
|
||||
# A. W. Schuettelkopf and D. M. F. van Aalten (2004).
|
||||
# PRODRG - a tool for high-throughput crystallography
|
||||
# of protein-ligand complexes.
|
||||
# Acta Crystallogr. D60, 1355--1363.
|
||||
#
|
||||
#
|
||||
@<TRIPOS>MOLECULE
|
||||
ADP
|
||||
39 41 1
|
||||
SMALL
|
||||
USER_CHARGES
|
||||
|
||||
PRODRG MOLECULE
|
||||
@<TRIPOS>ATOM
|
||||
1 O2B 94.270 83.620 105.750 O.3 1 ADP -0.314
|
||||
2 PB 93.660 85.080 106.010 P.3 1 ADP 0.859
|
||||
3 O3B 92.250 84.840 106.740 O.3 1 ADP -0.314
|
||||
4 O1B 94.550 85.960 106.800 O.2 1 ADP -0.314
|
||||
5 O3A 93.250 85.620 104.590 O.3 1 ADP 0.000
|
||||
6 PA 94.420 86.420 103.910 P.3 1 ADP 1.375
|
||||
7 O2A 95.710 85.470 103.820 O.3 1 ADP -0.377
|
||||
8 O1A 94.690 87.680 104.630 O.2 1 ADP -0.377
|
||||
9 O5' 93.920 86.620 102.390 O.3 1 ADP -0.377
|
||||
10 C5' 93.140 87.760 102.010 C.3 1 ADP 0.000
|
||||
11 H5' 93.033 88.425 102.867 H 1 ADP 0.000
|
||||
12 H5S 92.191 87.398 101.616 H 1 ADP 0.000
|
||||
13 C4' 93.830 88.510 100.870 C.3 1 ADP 0.172
|
||||
14 H4' 94.078 87.794 100.086 H 1 ADP 0.000
|
||||
15 O4' 93.050 89.580 100.320 O.3 1 ADP -0.377
|
||||
16 C3' 95.110 89.220 101.300 C.3 1 ADP 0.143
|
||||
17 H3' 94.971 89.688 102.275 H 1 ADP 0.000
|
||||
18 O3' 96.210 88.280 101.320 O.3 1 ADP -0.574
|
||||
19 H8L 97.040 88.750 101.610 H 1 ADP 0.380
|
||||
20 C2' 95.260 90.290 100.220 C.3 1 ADP 0.143
|
||||
21 H2' 95.270 91.281 100.674 H 1 ADP 0.000
|
||||
22 O2' 96.410 90.090 99.370 O.3 1 ADP -0.574
|
||||
23 H8M 96.410 90.780 98.640 H 1 ADP 0.380
|
||||
24 C1' 94.000 90.110 99.380 C.3 1 ADP 0.172
|
||||
25 H1' 94.220 89.323 98.658 H 1 ADP 0.000
|
||||
26 N9 93.520 91.290 98.600 N.ar 1 ADP 0.000
|
||||
27 C8 94.000 92.530 98.580 C.ar 1 ADP 0.000
|
||||
28 H8 94.840 92.900 99.170 H 1 ADP 0.000
|
||||
29 N7 93.270 93.250 97.740 N.ar 1 ADP 0.000
|
||||
30 C5 92.340 92.460 97.220 C.ar 1 ADP 0.000
|
||||
31 C4 92.490 91.240 97.750 C.ar 1 ADP 0.000
|
||||
32 N3 91.660 90.220 97.410 N.ar 1 ADP 0.000
|
||||
33 C2 90.610 90.410 96.480 C.ar 1 ADP 0.000
|
||||
34 H2 89.940 89.590 96.220 H 1 ADP 0.000
|
||||
35 N1 90.470 91.620 95.950 N.ar 1 ADP -0.293
|
||||
36 H1 89.730 91.800 95.290 H 1 ADP 0.267
|
||||
37 C6 91.350 92.670 96.330 C.ar 1 ADP 0.000
|
||||
38 N6 91.230 93.890 95.800 N.2 1 ADP 0.000
|
||||
39 H6 90.530 94.130 95.130 H 1 ADP 0.000
|
||||
@<TRIPOS>BOND
|
||||
1 2 1 1
|
||||
2 2 3 1
|
||||
3 2 4 2
|
||||
4 2 5 1
|
||||
5 6 5 1
|
||||
6 6 7 1
|
||||
7 6 8 2
|
||||
8 6 9 1
|
||||
9 10 9 1
|
||||
10 10 11 1
|
||||
11 10 12 1
|
||||
12 13 10 1
|
||||
13 13 14 1
|
||||
14 13 15 1
|
||||
15 13 16 1
|
||||
16 24 15 1
|
||||
17 16 17 1
|
||||
18 16 18 1
|
||||
19 16 20 1
|
||||
20 18 19 1
|
||||
21 20 21 1
|
||||
22 20 22 1
|
||||
23 20 24 1
|
||||
24 22 23 1
|
||||
25 24 25 1
|
||||
26 24 26 1
|
||||
27 26 27 ar
|
||||
28 26 31 ar
|
||||
29 27 28 1
|
||||
30 27 29 ar
|
||||
31 30 29 ar
|
||||
32 30 31 ar
|
||||
33 30 37 ar
|
||||
34 31 32 ar
|
||||
35 33 32 ar
|
||||
36 33 34 1
|
||||
37 33 35 ar
|
||||
38 35 36 1
|
||||
39 37 35 ar
|
||||
40 37 38 2
|
||||
41 38 39 1
|
||||
@<TRIPOS>SUBSTRUCTURE
|
||||
1 ADP 1
|
||||
76
pdb2pqr/tests/data/anthracene.mol2
Normal file
76
pdb2pqr/tests/data/anthracene.mol2
Normal file
@@ -0,0 +1,76 @@
|
||||
#
|
||||
#
|
||||
# This file was generated by PRODRG version AA180301.0717
|
||||
# PRODRG written/copyrighted by Daan van Aalten
|
||||
# and Alexander Schuettelkopf
|
||||
#
|
||||
# Questions/comments to dava@davapc1.bioch.dundee.ac.uk
|
||||
#
|
||||
# When using this software in a publication, cite:
|
||||
# A. W. Schuettelkopf and D. M. F. van Aalten (2004).
|
||||
# PRODRG - a tool for high-throughput crystallography
|
||||
# of protein-ligand complexes.
|
||||
# Acta Crystallogr. D60, 1355--1363.
|
||||
#
|
||||
#
|
||||
@<TRIPOS>MOLECULE
|
||||
DRG
|
||||
24 26 1
|
||||
SMALL
|
||||
USER_CHARGES
|
||||
|
||||
PRODRG MOLECULE
|
||||
@<TRIPOS>ATOM
|
||||
1 CAB 3.230 -1.790 7.950 C.ar 1 DRG 0.000
|
||||
2 HAB 4.070 -2.130 8.550 H 1 DRG 0.000
|
||||
3 CAC 2.480 -2.700 7.170 C.ar 1 DRG 0.000
|
||||
4 CAD 2.840 -4.060 7.160 C.ar 1 DRG 0.000
|
||||
5 HAD 3.680 -4.420 7.770 H 1 DRG 0.000
|
||||
6 CAE 2.100 -4.960 6.370 C.ar 1 DRG 0.000
|
||||
7 CAF 2.470 -6.320 6.350 C.ar 1 DRG 0.000
|
||||
8 HAF 3.300 -6.690 6.950 H 1 DRG 0.000
|
||||
9 CAG 1.740 -7.220 5.540 C.ar 1 DRG 0.000
|
||||
10 HAG 2.010 -8.270 5.520 H 1 DRG 0.000
|
||||
11 CAN 0.650 -6.760 4.760 C.ar 1 DRG 0.000
|
||||
12 HAN 0.100 -7.460 4.140 H 1 DRG 0.000
|
||||
13 CAM 0.280 -5.400 4.780 C.ar 1 DRG 0.000
|
||||
14 HAM -0.560 -5.070 4.170 H 1 DRG 0.000
|
||||
15 CAL 1.010 -4.500 5.580 C.ar 1 DRG 0.000
|
||||
16 CAK 0.640 -3.140 5.590 C.ar 1 DRG 0.000
|
||||
17 HAK -0.200 -2.780 4.990 H 1 DRG 0.000
|
||||
18 CAJ 1.380 -2.240 6.380 C.ar 1 DRG 0.000
|
||||
19 CAI 1.030 -0.870 6.390 C.ar 1 DRG 0.000
|
||||
20 HAI 0.190 -0.500 5.800 H 1 DRG 0.000
|
||||
21 CAH 1.780 0.030 7.170 C.ar 1 DRG 0.000
|
||||
22 HAH 1.520 1.080 7.180 H 1 DRG 0.000
|
||||
23 CAA 2.870 -0.430 7.950 C.ar 1 DRG 0.000
|
||||
24 HAA 3.440 0.280 8.540 H 1 DRG 0.000
|
||||
@<TRIPOS>BOND
|
||||
1 1 2 1
|
||||
2 3 1 ar
|
||||
3 1 23 ar
|
||||
4 3 4 ar
|
||||
5 3 18 ar
|
||||
6 4 5 1
|
||||
7 6 4 ar
|
||||
8 6 7 ar
|
||||
9 6 15 ar
|
||||
10 7 8 1
|
||||
11 7 9 ar
|
||||
12 9 10 1
|
||||
13 9 11 ar
|
||||
14 11 12 1
|
||||
15 11 13 ar
|
||||
16 13 14 1
|
||||
17 15 13 ar
|
||||
18 15 16 ar
|
||||
19 16 17 1
|
||||
20 18 16 ar
|
||||
21 18 19 ar
|
||||
22 19 20 1
|
||||
23 19 21 ar
|
||||
24 21 22 1
|
||||
25 21 23 ar
|
||||
26 23 24 1
|
||||
@<TRIPOS>SUBSTRUCTURE
|
||||
1 DRG 1
|
||||
110
pdb2pqr/tests/data/crown-ether.mol2
Normal file
110
pdb2pqr/tests/data/crown-ether.mol2
Normal file
@@ -0,0 +1,110 @@
|
||||
#
|
||||
#
|
||||
# This file was generated by PRODRG version AA180301.0717
|
||||
# PRODRG written/copyrighted by Daan van Aalten
|
||||
# and Alexander Schuettelkopf
|
||||
#
|
||||
# Questions/comments to dava@davapc1.bioch.dundee.ac.uk
|
||||
#
|
||||
# When using this software in a publication, cite:
|
||||
# A. W. Schuettelkopf and D. M. F. van Aalten (2004).
|
||||
# PRODRG - a tool for high-throughput crystallography
|
||||
# of protein-ligand complexes.
|
||||
# Acta Crystallogr. D60, 1355--1363.
|
||||
#
|
||||
#
|
||||
@<TRIPOS>MOLECULE
|
||||
DRG
|
||||
42 42 1
|
||||
SMALL
|
||||
USER_CHARGES
|
||||
|
||||
PRODRG MOLECULE
|
||||
@<TRIPOS>ATOM
|
||||
1 CAB -16.310 -55.310 26.830 C.3 1 DRG 0.180
|
||||
2 HAB -16.231 -56.038 27.637 H 1 DRG 0.000
|
||||
3 HAC -15.470 -54.617 26.783 H 1 DRG 0.000
|
||||
4 OAA -16.390 -56.040 25.590 O.3 1 DRG -0.360
|
||||
5 CAH -15.130 -56.650 25.250 C.3 1 DRG 0.180
|
||||
6 HAJ -14.458 -55.861 24.914 H 1 DRG 0.000
|
||||
7 HAK -14.756 -57.213 26.105 H 1 DRG 0.000
|
||||
8 CAJ -15.330 -57.590 24.070 C.3 1 DRG 0.180
|
||||
9 HAN -15.844 -58.470 24.457 H 1 DRG 0.000
|
||||
10 HAO -15.886 -57.069 23.291 H 1 DRG 0.000
|
||||
11 OAL -14.060 -58.030 23.530 O.3 1 DRG -0.360
|
||||
12 CAM -14.190 -58.950 22.410 C.3 1 DRG 0.180
|
||||
13 HAR -13.185 -59.282 22.150 H 1 DRG 0.000
|
||||
14 HAS -14.845 -59.767 22.712 H 1 DRG 0.000
|
||||
15 CAN -14.770 -58.310 21.140 C.3 1 DRG 0.180
|
||||
16 HAT -14.400 -57.285 21.112 H 1 DRG 0.000
|
||||
17 HAU -14.478 -58.905 20.275 H 1 DRG 0.000
|
||||
18 OAO -16.220 -58.250 21.210 O.3 1 DRG -0.360
|
||||
19 CAP -16.700 -57.050 20.580 C.3 1 DRG 0.180
|
||||
20 HAV -16.101 -56.219 20.952 H 1 DRG 0.000
|
||||
21 HAW -16.653 -57.171 19.498 H 1 DRG 0.000
|
||||
22 CAQ -18.150 -56.760 20.990 C.3 1 DRG 0.180
|
||||
23 HAX -18.427 -55.819 20.515 H 1 DRG 0.000
|
||||
24 HAY -18.782 -57.600 20.702 H 1 DRG 0.000
|
||||
25 OAR -18.230 -56.570 22.420 O.3 1 DRG -0.360
|
||||
26 CAK -19.540 -56.130 22.830 C.3 1 DRG 0.180
|
||||
27 HAP -20.294 -56.792 22.404 H 1 DRG 0.000
|
||||
28 HAQ -19.650 -55.088 22.528 H 1 DRG 0.000
|
||||
29 CAI -19.640 -56.160 24.350 C.3 1 DRG 0.180
|
||||
30 HAL -18.772 -55.654 24.773 H 1 DRG 0.000
|
||||
31 HAM -19.713 -57.209 24.636 H 1 DRG 0.000
|
||||
32 OAG -20.840 -55.500 24.810 O.3 1 DRG -0.360
|
||||
33 CAF -21.000 -55.520 26.250 C.3 1 DRG 0.180
|
||||
34 HAH -20.918 -56.552 26.590 H 1 DRG 0.000
|
||||
35 HAI -21.969 -55.073 26.472 H 1 DRG 0.000
|
||||
36 CAE -19.960 -54.680 27.000 C.3 1 DRG 0.180
|
||||
37 HAF -20.356 -54.416 27.981 H 1 DRG 0.000
|
||||
38 HAG -19.746 -53.817 26.370 H 1 DRG 0.000
|
||||
39 OAD -18.730 -55.410 27.170 O.3 1 DRG -0.360
|
||||
40 CAC -17.600 -54.520 27.080 C.3 1 DRG 0.180
|
||||
41 HAE -17.758 -53.823 26.257 H 1 DRG 0.000
|
||||
42 HAD -17.484 -54.034 28.049 H 1 DRG 0.000
|
||||
@<TRIPOS>BOND
|
||||
1 1 2 1
|
||||
2 1 3 1
|
||||
3 1 4 1
|
||||
4 1 40 1
|
||||
5 5 4 1
|
||||
6 5 6 1
|
||||
7 5 7 1
|
||||
8 5 8 1
|
||||
9 8 9 1
|
||||
10 8 10 1
|
||||
11 8 11 1
|
||||
12 12 11 1
|
||||
13 12 13 1
|
||||
14 12 14 1
|
||||
15 12 15 1
|
||||
16 15 16 1
|
||||
17 15 17 1
|
||||
18 15 18 1
|
||||
19 19 18 1
|
||||
20 19 20 1
|
||||
21 19 21 1
|
||||
22 19 22 1
|
||||
23 22 23 1
|
||||
24 22 24 1
|
||||
25 22 25 1
|
||||
26 26 25 1
|
||||
27 26 27 1
|
||||
28 26 28 1
|
||||
29 26 29 1
|
||||
30 29 30 1
|
||||
31 29 31 1
|
||||
32 29 32 1
|
||||
33 33 32 1
|
||||
34 33 34 1
|
||||
35 33 35 1
|
||||
36 33 36 1
|
||||
37 36 37 1
|
||||
38 36 38 1
|
||||
39 36 39 1
|
||||
40 40 39 1
|
||||
41 40 41 1
|
||||
42 40 42 1
|
||||
@<TRIPOS>SUBSTRUCTURE
|
||||
1 DRG 1
|
||||
62
pdb2pqr/tests/data/cyclohexane.mol2
Normal file
62
pdb2pqr/tests/data/cyclohexane.mol2
Normal file
@@ -0,0 +1,62 @@
|
||||
#
|
||||
#
|
||||
# This file was generated by PRODRG version AA180301.0717
|
||||
# PRODRG written/copyrighted by Daan van Aalten
|
||||
# and Alexander Schuettelkopf
|
||||
#
|
||||
# Questions/comments to dava@davapc1.bioch.dundee.ac.uk
|
||||
#
|
||||
# When using this software in a publication, cite:
|
||||
# A. W. Schuettelkopf and D. M. F. van Aalten (2004).
|
||||
# PRODRG - a tool for high-throughput crystallography
|
||||
# of protein-ligand complexes.
|
||||
# Acta Crystallogr. D60, 1355--1363.
|
||||
#
|
||||
#
|
||||
@<TRIPOS>MOLECULE
|
||||
DRG
|
||||
18 18 1
|
||||
SMALL
|
||||
USER_CHARGES
|
||||
|
||||
PRODRG MOLECULE
|
||||
@<TRIPOS>ATOM
|
||||
1 CAA -13.920 -8.010 11.920 C.3 1 DRG 0.000
|
||||
2 HAA -13.694 -9.016 11.565 H 1 DRG 0.000
|
||||
3 HAB -13.141 -7.277 11.707 H 1 DRG 0.000
|
||||
4 CAB -14.100 -8.040 13.440 C.3 1 DRG 0.000
|
||||
5 HAC -14.959 -8.678 13.646 H 1 DRG 0.000
|
||||
6 HAD -13.173 -8.374 13.907 H 1 DRG 0.000
|
||||
7 CAC -14.450 -6.640 13.950 C.3 1 DRG 0.000
|
||||
8 HAE -13.631 -5.958 13.723 H 1 DRG 0.000
|
||||
9 HAF -14.671 -6.735 15.013 H 1 DRG 0.000
|
||||
10 CAF -15.730 -6.140 13.270 C.3 1 DRG 0.000
|
||||
11 HAK -16.510 -6.869 13.488 H 1 DRG 0.000
|
||||
12 HAL -15.952 -5.132 13.619 H 1 DRG 0.000
|
||||
13 CAE -15.550 -6.120 11.750 C.3 1 DRG 0.000
|
||||
14 HAI -14.746 -5.430 11.493 H 1 DRG 0.000
|
||||
15 HAJ -16.517 -5.857 11.320 H 1 DRG 0.000
|
||||
16 CAD -15.200 -7.510 11.240 C.3 1 DRG 0.000
|
||||
17 HAH -16.019 -8.194 11.464 H 1 DRG 0.000
|
||||
18 HAG -14.978 -7.414 10.177 H 1 DRG 0.000
|
||||
@<TRIPOS>BOND
|
||||
1 1 2 1
|
||||
2 1 3 1
|
||||
3 1 4 1
|
||||
4 1 16 1
|
||||
5 4 5 1
|
||||
6 4 6 1
|
||||
7 4 7 1
|
||||
8 7 8 1
|
||||
9 7 9 1
|
||||
10 7 10 1
|
||||
11 10 11 1
|
||||
12 10 12 1
|
||||
13 10 13 1
|
||||
14 13 14 1
|
||||
15 13 15 1
|
||||
16 13 16 1
|
||||
17 16 17 1
|
||||
18 16 18 1
|
||||
@<TRIPOS>SUBSTRUCTURE
|
||||
1 DRG 1
|
||||
43
pdb2pqr/tests/data/ethanol.mol2
Normal file
43
pdb2pqr/tests/data/ethanol.mol2
Normal file
@@ -0,0 +1,43 @@
|
||||
#
|
||||
#
|
||||
# This file was generated by PRODRG version AA180301.0717
|
||||
# PRODRG written/copyrighted by Daan van Aalten
|
||||
# and Alexander Schuettelkopf
|
||||
#
|
||||
# Questions/comments to dava@davapc1.bioch.dundee.ac.uk
|
||||
#
|
||||
# When using this software in a publication, cite:
|
||||
# A. W. Schuettelkopf and D. M. F. van Aalten (2004).
|
||||
# PRODRG - a tool for high-throughput crystallography
|
||||
# of protein-ligand complexes.
|
||||
# Acta Crystallogr. D60, 1355--1363.
|
||||
#
|
||||
#
|
||||
@<TRIPOS>MOLECULE
|
||||
DRG
|
||||
9 8 1
|
||||
SMALL
|
||||
USER_CHARGES
|
||||
|
||||
PRODRG MOLECULE
|
||||
@<TRIPOS>ATOM
|
||||
1 CAA -1.560 -19.770 25.200 C.3 1 DRG 0.000
|
||||
2 HAA -2.402 -19.161 25.529 H 1 DRG 0.000
|
||||
3 HAB -1.355 -19.569 24.148 H 1 DRG 0.000
|
||||
4 HAC -0.679 -19.602 25.819 H 1 DRG 0.000
|
||||
5 CAB -1.900 -21.250 25.380 C.3 1 DRG 0.150
|
||||
6 HAD -1.057 -21.858 25.050 H 1 DRG 0.000
|
||||
7 HAE -2.817 -21.431 24.819 H 1 DRG 0.000
|
||||
8 OAC -2.170 -21.520 26.760 O.3 1 DRG -0.548
|
||||
9 HAF -2.390 -22.490 26.870 H 1 DRG 0.398
|
||||
@<TRIPOS>BOND
|
||||
1 1 2 1
|
||||
2 1 3 1
|
||||
3 1 4 1
|
||||
4 5 1 1
|
||||
5 5 6 1
|
||||
6 5 7 1
|
||||
7 5 8 1
|
||||
8 8 9 1
|
||||
@<TRIPOS>SUBSTRUCTURE
|
||||
1 DRG 1
|
||||
83
pdb2pqr/tests/data/fatty-acid.mol2
Normal file
83
pdb2pqr/tests/data/fatty-acid.mol2
Normal file
@@ -0,0 +1,83 @@
|
||||
#
|
||||
#
|
||||
# This file was generated by PRODRG version AA180301.0717
|
||||
# PRODRG written/copyrighted by Daan van Aalten
|
||||
# and Alexander Schuettelkopf
|
||||
#
|
||||
# Questions/comments to dava@davapc1.bioch.dundee.ac.uk
|
||||
#
|
||||
# When using this software in a publication, cite:
|
||||
# A. W. Schuettelkopf and D. M. F. van Aalten (2004).
|
||||
# PRODRG - a tool for high-throughput crystallography
|
||||
# of protein-ligand complexes.
|
||||
# Acta Crystallogr. D60, 1355--1363.
|
||||
#
|
||||
#
|
||||
@<TRIPOS>MOLECULE
|
||||
DRG
|
||||
29 28 1
|
||||
SMALL
|
||||
USER_CHARGES
|
||||
|
||||
PRODRG MOLECULE
|
||||
@<TRIPOS>ATOM
|
||||
1 OAA 0.650 -4.500 8.530 O.co2 1 DRG -0.360
|
||||
2 CAB 0.740 -5.130 7.450 C.2 1 DRG 0.720
|
||||
3 OAL 1.110 -6.320 7.330 O.co2 1 DRG -0.360
|
||||
4 CAC 0.360 -4.390 6.170 C.3 1 DRG 0.000
|
||||
5 HAC 0.512 -3.327 6.360 H 1 DRG 0.000
|
||||
6 HAD 0.947 -4.783 5.340 H 1 DRG 0.000
|
||||
7 CAD -1.130 -4.580 5.870 C.3 1 DRG 0.000
|
||||
8 HAE -1.283 -5.645 5.697 H 1 DRG 0.000
|
||||
9 HAF -1.712 -4.179 6.700 H 1 DRG 0.000
|
||||
10 CAE -1.540 -3.860 4.580 C.3 1 DRG 0.000
|
||||
11 HAG -2.623 -3.951 4.498 H 1 DRG 0.000
|
||||
12 HAH -1.182 -2.831 4.616 H 1 DRG 0.000
|
||||
13 CAF -0.940 -4.560 3.350 C.2 1 DRG 0.000
|
||||
14 HAI -0.744 -5.632 3.323 H 1 DRG 0.000
|
||||
15 CAG -0.640 -3.640 2.170 C.2 1 DRG 0.000
|
||||
16 HAJ -0.871 -2.575 2.182 H 1 DRG 0.000
|
||||
17 CAH 0.010 -4.330 0.970 C.3 1 DRG 0.000
|
||||
18 HAK 0.603 -3.576 0.452 H 1 DRG 0.000
|
||||
19 HAL 0.584 -5.190 1.315 H 1 DRG 0.000
|
||||
20 CAI -1.070 -4.800 -0.010 C.3 1 DRG 0.000
|
||||
21 HAM -1.680 -5.529 0.523 H 1 DRG 0.000
|
||||
22 HAN -1.628 -3.931 -0.359 H 1 DRG 0.000
|
||||
23 CAJ -0.480 -5.530 -1.230 C.3 1 DRG 0.000
|
||||
24 HAO -1.294 -5.654 -1.944 H 1 DRG 0.000
|
||||
25 HAP 0.361 -4.952 -1.614 H 1 DRG 0.000
|
||||
26 CAK 0.010 -6.940 -0.870 C.3 1 DRG 0.000
|
||||
27 HAR -0.823 -7.527 -0.484 H 1 DRG 0.000
|
||||
28 HAS 0.788 -6.871 -0.110 H 1 DRG 0.000
|
||||
29 HAQ 0.395 -7.354 -1.802 H 1 DRG 0.000
|
||||
@<TRIPOS>BOND
|
||||
1 2 1 2
|
||||
2 2 3 2
|
||||
3 2 4 1
|
||||
4 4 5 1
|
||||
5 4 6 1
|
||||
6 4 7 1
|
||||
7 7 8 1
|
||||
8 7 9 1
|
||||
9 7 10 1
|
||||
10 10 11 1
|
||||
11 10 12 1
|
||||
12 10 13 1
|
||||
13 13 14 1
|
||||
14 13 15 2
|
||||
15 15 16 1
|
||||
16 17 15 1
|
||||
17 17 18 1
|
||||
18 17 19 1
|
||||
19 17 20 1
|
||||
20 20 21 1
|
||||
21 20 22 1
|
||||
22 20 23 1
|
||||
23 23 24 1
|
||||
24 23 25 1
|
||||
25 23 26 1
|
||||
26 26 27 1
|
||||
27 26 28 1
|
||||
28 26 29 1
|
||||
@<TRIPOS>SUBSTRUCTURE
|
||||
1 DRG 1
|
||||
53
pdb2pqr/tests/data/glycerol.mol2
Normal file
53
pdb2pqr/tests/data/glycerol.mol2
Normal file
@@ -0,0 +1,53 @@
|
||||
#
|
||||
#
|
||||
# This file was generated by PRODRG version AA180301.0717
|
||||
# PRODRG written/copyrighted by Daan van Aalten
|
||||
# and Alexander Schuettelkopf
|
||||
#
|
||||
# Questions/comments to dava@davapc1.bioch.dundee.ac.uk
|
||||
#
|
||||
# When using this software in a publication, cite:
|
||||
# A. W. Schuettelkopf and D. M. F. van Aalten (2004).
|
||||
# PRODRG - a tool for high-throughput crystallography
|
||||
# of protein-ligand complexes.
|
||||
# Acta Crystallogr. D60, 1355--1363.
|
||||
#
|
||||
#
|
||||
@<TRIPOS>MOLECULE
|
||||
DRG
|
||||
14 13 1
|
||||
SMALL
|
||||
USER_CHARGES
|
||||
|
||||
PRODRG MOLECULE
|
||||
@<TRIPOS>ATOM
|
||||
1 OAB 14.010 4.880 -4.720 O.3 1 DRG -0.548
|
||||
2 HAG 13.390 4.670 -5.480 H 1 DRG 0.398
|
||||
3 CAA 15.220 5.380 -5.300 C.3 1 DRG 0.150
|
||||
4 HAA 15.864 4.543 -5.568 H 1 DRG 0.000
|
||||
5 HAB 15.672 6.070 -4.587 H 1 DRG 0.000
|
||||
6 CAC 14.900 6.200 -6.560 C.3 1 DRG 0.150
|
||||
7 HAC 14.298 7.062 -6.272 H 1 DRG 0.000
|
||||
8 OAD 14.180 5.390 -7.500 O.3 1 DRG -0.548
|
||||
9 HAD 14.870 4.930 -8.070 H 1 DRG 0.398
|
||||
10 CAE 16.200 6.700 -7.200 C.3 1 DRG 0.150
|
||||
11 HAE 15.908 7.395 -7.987 H 1 DRG 0.000
|
||||
12 HAF 16.820 7.156 -6.428 H 1 DRG 0.000
|
||||
13 OAF 16.940 5.630 -7.820 O.3 1 DRG -0.548
|
||||
14 HAH 17.840 5.970 -8.090 H 1 DRG 0.398
|
||||
@<TRIPOS>BOND
|
||||
1 1 2 1
|
||||
2 3 1 1
|
||||
3 3 4 1
|
||||
4 3 5 1
|
||||
5 6 3 1
|
||||
6 6 7 1
|
||||
7 6 8 1
|
||||
8 6 10 1
|
||||
9 8 9 1
|
||||
10 10 11 1
|
||||
11 10 12 1
|
||||
12 10 13 1
|
||||
13 13 14 1
|
||||
@<TRIPOS>SUBSTRUCTURE
|
||||
1 DRG 1
|
||||
63
pdb2pqr/tests/data/naphthalene.mol2
Normal file
63
pdb2pqr/tests/data/naphthalene.mol2
Normal file
@@ -0,0 +1,63 @@
|
||||
#
|
||||
#
|
||||
# This file was generated by PRODRG version AA180301.0717
|
||||
# PRODRG written/copyrighted by Daan van Aalten
|
||||
# and Alexander Schuettelkopf
|
||||
#
|
||||
# Questions/comments to dava@davapc1.bioch.dundee.ac.uk
|
||||
#
|
||||
# When using this software in a publication, cite:
|
||||
# A. W. Schuettelkopf and D. M. F. van Aalten (2004).
|
||||
# PRODRG - a tool for high-throughput crystallography
|
||||
# of protein-ligand complexes.
|
||||
# Acta Crystallogr. D60, 1355--1363.
|
||||
#
|
||||
#
|
||||
@<TRIPOS>MOLECULE
|
||||
DRG
|
||||
18 19 1
|
||||
SMALL
|
||||
USER_CHARGES
|
||||
|
||||
PRODRG MOLECULE
|
||||
@<TRIPOS>ATOM
|
||||
1 CAB -6.460 -5.320 -4.190 C.ar 1 DRG 0.000
|
||||
2 HAB -5.680 -5.810 -4.760 H 1 DRG 0.000
|
||||
3 CAC -6.230 -4.080 -3.560 C.ar 1 DRG 0.000
|
||||
4 CAD -4.970 -3.460 -3.660 C.ar 1 DRG 0.000
|
||||
5 HAD -4.160 -3.930 -4.220 H 1 DRG 0.000
|
||||
6 CAE -4.750 -2.220 -3.030 C.ar 1 DRG 0.000
|
||||
7 HAE -3.780 -1.740 -3.100 H 1 DRG 0.000
|
||||
8 CAJ -5.790 -1.590 -2.300 C.ar 1 DRG 0.000
|
||||
9 HAJ -5.610 -0.630 -1.820 H 1 DRG 0.000
|
||||
10 CAI -7.050 -2.200 -2.190 C.ar 1 DRG 0.000
|
||||
11 HAI -7.840 -1.700 -1.620 H 1 DRG 0.000
|
||||
12 CAH -7.280 -3.440 -2.810 C.ar 1 DRG 0.000
|
||||
13 CAG -8.550 -4.060 -2.710 C.ar 1 DRG 0.000
|
||||
14 HAG -9.350 -3.600 -2.140 H 1 DRG 0.000
|
||||
15 CAF -8.760 -5.300 -3.340 C.ar 1 DRG 0.000
|
||||
16 HAF -9.740 -5.780 -3.270 H 1 DRG 0.000
|
||||
17 CAA -7.730 -5.920 -4.080 C.ar 1 DRG 0.000
|
||||
18 HAA -7.920 -6.880 -4.560 H 1 DRG 0.000
|
||||
@<TRIPOS>BOND
|
||||
1 1 2 1
|
||||
2 3 1 ar
|
||||
3 1 17 ar
|
||||
4 3 4 ar
|
||||
5 3 12 ar
|
||||
6 4 5 1
|
||||
7 4 6 ar
|
||||
8 6 7 1
|
||||
9 6 8 ar
|
||||
10 8 9 1
|
||||
11 8 10 ar
|
||||
12 10 11 1
|
||||
13 12 10 ar
|
||||
14 12 13 ar
|
||||
15 13 14 1
|
||||
16 13 15 ar
|
||||
17 15 16 1
|
||||
18 15 17 ar
|
||||
19 17 18 1
|
||||
@<TRIPOS>SUBSTRUCTURE
|
||||
1 DRG 1
|
||||
46
pdb2pqr/tests/data/pyrrole.mol2
Normal file
46
pdb2pqr/tests/data/pyrrole.mol2
Normal file
@@ -0,0 +1,46 @@
|
||||
#
|
||||
#
|
||||
# This file was generated by PRODRG version AA180301.0717
|
||||
# PRODRG written/copyrighted by Daan van Aalten
|
||||
# and Alexander Schuettelkopf
|
||||
#
|
||||
# Questions/comments to dava@davapc1.bioch.dundee.ac.uk
|
||||
#
|
||||
# When using this software in a publication, cite:
|
||||
# A. W. Schuettelkopf and D. M. F. van Aalten (2004).
|
||||
# PRODRG - a tool for high-throughput crystallography
|
||||
# of protein-ligand complexes.
|
||||
# Acta Crystallogr. D60, 1355--1363.
|
||||
#
|
||||
#
|
||||
@<TRIPOS>MOLECULE
|
||||
DRG
|
||||
10 10 1
|
||||
SMALL
|
||||
USER_CHARGES
|
||||
|
||||
PRODRG MOLECULE
|
||||
@<TRIPOS>ATOM
|
||||
1 CAE -12.850 -3.330 -3.760 C.3 1 DRG 0.000
|
||||
2 HAE -13.499 -2.470 -3.597 H 1 DRG 0.000
|
||||
3 HAF -12.168 -3.254 -4.607 H 1 DRG 0.000
|
||||
4 CAD -13.650 -4.620 -3.910 C.2 1 DRG 0.000
|
||||
5 HAD -14.388 -4.834 -4.683 H 1 DRG 0.000
|
||||
6 CAA -13.280 -5.440 -2.920 C.2 1 DRG 0.000
|
||||
7 HAA -13.685 -6.442 -2.777 H 1 DRG 0.000
|
||||
8 NAB -12.360 -4.890 -2.130 N.2 1 DRG 0.000
|
||||
9 CAC -12.030 -3.660 -2.520 C.2 1 DRG 0.000
|
||||
10 HAC -11.303 -3.006 -2.038 H 1 DRG 0.000
|
||||
@<TRIPOS>BOND
|
||||
1 1 2 1
|
||||
2 1 3 1
|
||||
3 1 4 1
|
||||
4 1 9 1
|
||||
5 4 5 1
|
||||
6 4 6 2
|
||||
7 6 7 1
|
||||
8 6 8 1
|
||||
9 9 8 2
|
||||
10 9 10 1
|
||||
@<TRIPOS>SUBSTRUCTURE
|
||||
1 DRG 1
|
||||
59
pdb2pqr/tests/data/tetramethylammonium.mol2
Normal file
59
pdb2pqr/tests/data/tetramethylammonium.mol2
Normal file
@@ -0,0 +1,59 @@
|
||||
#
|
||||
#
|
||||
# This file was generated by PRODRG version AA180301.0717
|
||||
# PRODRG written/copyrighted by Daan van Aalten
|
||||
# and Alexander Schuettelkopf
|
||||
#
|
||||
# Questions/comments to dava@davapc1.bioch.dundee.ac.uk
|
||||
#
|
||||
# When using this software in a publication, cite:
|
||||
# A. W. Schuettelkopf and D. M. F. van Aalten (2004).
|
||||
# PRODRG - a tool for high-throughput crystallography
|
||||
# of protein-ligand complexes.
|
||||
# Acta Crystallogr. D60, 1355--1363.
|
||||
#
|
||||
#
|
||||
@<TRIPOS>MOLECULE
|
||||
DRG
|
||||
17 16 1
|
||||
SMALL
|
||||
USER_CHARGES
|
||||
|
||||
PRODRG MOLECULE
|
||||
@<TRIPOS>ATOM
|
||||
1 CAA -12.250 -7.600 -0.980 C.3 1 DRG 0.000
|
||||
2 HAA -12.072 -6.550 -1.213 H 1 DRG 0.000
|
||||
3 HAB -12.578 -7.692 0.055 H 1 DRG 0.000
|
||||
4 HAC -12.974 -8.041 -1.666 H 1 DRG 0.000
|
||||
5 NAC -11.010 -8.360 -1.170 N.3 1 DRG 0.000
|
||||
6 CAB -9.960 -7.830 -0.280 C.3 1 DRG 0.000
|
||||
7 HAE -10.285 -7.915 0.757 H 1 DRG 0.000
|
||||
8 HAF -9.777 -6.782 -0.518 H 1 DRG 0.000
|
||||
9 HAD -9.078 -8.441 -0.471 H 1 DRG 0.000
|
||||
10 CAE -11.250 -9.780 -0.850 C.3 1 DRG 0.000
|
||||
11 HAK -11.582 -9.869 0.184 H 1 DRG 0.000
|
||||
12 HAL -10.327 -10.344 -0.984 H 1 DRG 0.000
|
||||
13 HAJ -12.022 -10.111 -1.545 H 1 DRG 0.000
|
||||
14 CAD -10.560 -8.240 -2.570 C.3 1 DRG 0.000
|
||||
15 HAH -10.383 -7.191 -2.807 H 1 DRG 0.000
|
||||
16 HAI -11.328 -8.637 -3.234 H 1 DRG 0.000
|
||||
17 HAG -9.641 -8.822 -2.634 H 1 DRG 0.000
|
||||
@<TRIPOS>BOND
|
||||
1 1 2 1
|
||||
2 1 3 1
|
||||
3 1 4 1
|
||||
4 5 1 1
|
||||
5 5 6 1
|
||||
6 5 10 1
|
||||
7 5 14 1
|
||||
8 6 7 1
|
||||
9 6 8 1
|
||||
10 6 9 1
|
||||
11 10 11 1
|
||||
12 10 12 1
|
||||
13 10 13 1
|
||||
14 14 15 1
|
||||
15 14 16 1
|
||||
16 14 17 1
|
||||
@<TRIPOS>SUBSTRUCTURE
|
||||
1 DRG 1
|
||||
525
pdb2pqr/tests/ligand_results.py
Normal file
525
pdb2pqr/tests/ligand_results.py
Normal file
@@ -0,0 +1,525 @@
|
||||
"""Expected results for ligand tests"""
|
||||
TORSION_RESULTS = {
|
||||
"acetylcholine.mol2": {
|
||||
('CAA', 'NAD', 'CAE', 'CAF'), ('CAC', 'NAD', 'CAE', 'CAF'),
|
||||
('CAE', 'CAF', 'OAG', 'CAH'), ('CAF', 'CAE', 'NAD', 'CAA'),
|
||||
('CAF', 'CAE', 'NAD', 'CAC'), ('CAF', 'CAE', 'NAD', 'CAJ'),
|
||||
('CAF', 'OAG', 'CAH', 'CAI'), ('CAF', 'OAG', 'CAH', 'OAB'),
|
||||
('CAH', 'OAG', 'CAF', 'CAE'), ('CAI', 'CAH', 'OAG', 'CAF'),
|
||||
('CAJ', 'NAD', 'CAE', 'CAF'), ('NAD', 'CAE', 'CAF', 'OAG'),
|
||||
('OAB', 'CAH', 'OAG', 'CAF'), ('OAG', 'CAF', 'CAE', 'NAD')},
|
||||
"ethanol.mol2": set(),
|
||||
"pyrrole.mol2": {
|
||||
('CAA', 'CAD', 'CAE', 'CAC'), ('CAA', 'NAB', 'CAC', 'CAE'),
|
||||
('CAC', 'CAE', 'CAD', 'CAA'), ('CAC', 'NAB', 'CAA', 'CAD'),
|
||||
('CAD', 'CAA', 'NAB', 'CAC'), ('CAD', 'CAE', 'CAC', 'NAB'),
|
||||
('CAE', 'CAC', 'NAB', 'CAA'), ('CAE', 'CAD', 'CAA', 'NAB'),
|
||||
('NAB', 'CAA', 'CAD', 'CAE'), ('NAB', 'CAC', 'CAE', 'CAD')},
|
||||
"tetramethylammonium.mol2": set(),
|
||||
"glycerol.mol2": {
|
||||
('CAA', 'CAC', 'CAE', 'OAF'), ('CAE', 'CAC', 'CAA', 'OAB'),
|
||||
('OAB', 'CAA', 'CAC', 'CAE'), ('OAB', 'CAA', 'CAC', 'OAD'),
|
||||
('OAD', 'CAC', 'CAA', 'OAB'), ('OAD', 'CAC', 'CAE', 'OAF'),
|
||||
('OAF', 'CAE', 'CAC', 'CAA'), ('OAF', 'CAE', 'CAC', 'OAD')},
|
||||
"cyclohexane.mol2": {
|
||||
('CAA', 'CAB', 'CAC', 'CAF'), ('CAA', 'CAD', 'CAE', 'CAF'),
|
||||
('CAB', 'CAA', 'CAD', 'CAE'), ('CAB', 'CAC', 'CAF', 'CAE'),
|
||||
('CAC', 'CAB', 'CAA', 'CAD'), ('CAC', 'CAF', 'CAE', 'CAD'),
|
||||
('CAD', 'CAA', 'CAB', 'CAC'), ('CAD', 'CAE', 'CAF', 'CAC'),
|
||||
('CAE', 'CAD', 'CAA', 'CAB'), ('CAE', 'CAF', 'CAC', 'CAB'),
|
||||
('CAF', 'CAC', 'CAB', 'CAA'), ('CAF', 'CAE', 'CAD', 'CAA')}
|
||||
}
|
||||
|
||||
|
||||
RING_RESULTS = {
|
||||
"ethanol.mol2": set(),
|
||||
"glycerol.mol2": set(),
|
||||
"tetramethylammonium.mol2": set(),
|
||||
"acetate.mol2": set(),
|
||||
"acetonitrile.mol2": set(),
|
||||
"acetylcholine.mol2": set(),
|
||||
"fatty-acid.mol2": set(),
|
||||
"pyrrole.mol2": {('CAA', 'CAD', 'CAE', 'CAC', 'NAB')},
|
||||
"adp.mol2": {
|
||||
('C4', 'C5', 'N7', 'C8', 'N9'), ('C2', 'N1', 'C6', 'C5', 'C4', 'N3'),
|
||||
("C1'", "O4'", "C4'", "C3'", "C2'")},
|
||||
"cyclohexane.mol2": {('CAA', 'CAD', 'CAE', 'CAF', 'CAC', 'CAB')},
|
||||
"naphthalene.mol2": {
|
||||
('CAA', 'CAF', 'CAG', 'CAH', 'CAC', 'CAB'),
|
||||
('CAC', 'CAH', 'CAI', 'CAJ', 'CAE', 'CAD')},
|
||||
"anthracene.mol2": {
|
||||
('CAA', 'CAH', 'CAI', 'CAJ', 'CAC', 'CAB'),
|
||||
('CAC', 'CAJ', 'CAK', 'CAL', 'CAE', 'CAD'),
|
||||
('CAE', 'CAL', 'CAM', 'CAN', 'CAG', 'CAF')},
|
||||
"1HPX-ligand.mol2": {
|
||||
('C1', 'C2', 'C3', 'C4', 'C5', 'N1'),
|
||||
('C18', 'N4', 'C20', 'S2', 'C19'),
|
||||
('C3', 'C6', 'C7', 'C8', 'C9', 'C4'),
|
||||
('C28', 'C33', 'C32', 'C31', 'C30', 'C29')},
|
||||
"1QBS-ligand.mol2": {
|
||||
('C1', 'N7', 'C6', 'C5', 'C4', 'C3', 'N2'),
|
||||
('C31', 'C36', 'C35', 'C34', 'C33', 'C32'),
|
||||
('C61', 'C66', 'C65', 'C64', 'C63', 'C62'),
|
||||
('C71', 'C76', 'C75', 'C74', 'C73', 'C72'),
|
||||
('C21', 'C26', 'C25', 'C24', 'C23', 'C22')},
|
||||
"1US0-ligand.mol2": {
|
||||
('C24', 'C27', 'C28', 'C25', 'C29', 'C26'),
|
||||
('C2', 'C4', 'C7', 'C3', 'C6', 'C5')}
|
||||
}
|
||||
|
||||
|
||||
FORMAL_CHARGE_RESULTS = {
|
||||
"1HPX-ligand.mol2": 87*[0],
|
||||
"1QBS-ligand.mol2": 80*[0],
|
||||
"1US0-ligand.mol2": 22*[0] + [-0.5, -0.5] + 11*[0],
|
||||
"acetate.mol2": [-0.5, 0, -0.5] + 4*[0],
|
||||
"acetylcholine.mol2": 13*[0] + [1] + 12*[0],
|
||||
"adp.mol2": [-1] + 5*[0] + [-1] + 32*[0],
|
||||
"anthracene.mol2": 24*[0],
|
||||
"acetonitrile.mol2": 6*[0],
|
||||
"cyclohexane.mol2": 18*[0],
|
||||
"ethanol.mol2": 9*[0],
|
||||
"fatty-acid.mol2": [-0.5, 0, -0.5] + 26*[0],
|
||||
"glycerol.mol2": 14*[0],
|
||||
"naphthalene.mol2": 18*[0],
|
||||
"crown-ether.mol2": 42*[0],
|
||||
"pyrrole.mol2": 10*[0],
|
||||
"tetramethylammonium.mol2": 4*[0] + [1] + 12*[0]
|
||||
}
|
||||
|
||||
PARAMETER_RESULTS = {
|
||||
"1HPX-ligand.mol2": [
|
||||
{'name': 'C1', 'type': 'C.ar', 'charge': -0.043081773453678196, 'radius': 1.87},
|
||||
{'name': 'N1', 'type': 'N.ar', 'charge': -0.35678069534508244, 'radius': 1.4},
|
||||
{'name': 'O1', 'type': 'O.3', 'charge': -0.5711988943947174, 'radius': 1.52},
|
||||
{'name': 'S1', 'type': 'S.3', 'charge': -0.36230725415046, 'radius': 2.15},
|
||||
{'name': 'C2', 'type': 'C.ar', 'charge': -0.07546448002333427, 'radius': 1.87},
|
||||
{'name': 'N2', 'type': 'N.am', 'charge': -0.703336840791423, 'radius': 1.4},
|
||||
{'name': 'O2', 'type': 'O.3', 'charge': -0.5909676444057169, 'radius': 1.52},
|
||||
{'name': 'S2', 'type': 'S.3', 'charge': -0.31326568130416904, 'radius': 2.15},
|
||||
{'name': 'C3', 'type': 'C.ar', 'charge': 0.012184036151037315, 'radius': 1.87},
|
||||
{'name': 'N3', 'type': 'N.am', 'charge': -0.7139711103762134, 'radius': 1.4},
|
||||
{'name': 'O3', 'type': 'O.2', 'charge': -0.2919660371248733, 'radius': 1.52},
|
||||
{'name': 'C4', 'type': 'C.ar', 'charge': -0.024891112570323084, 'radius': 1.87},
|
||||
{'name': 'N4', 'type': 'N.am', 'charge': -0.7120419698971743, 'radius': 1.4},
|
||||
{'name': 'O4', 'type': 'O.2', 'charge': -0.2689251910425875, 'radius': 1.52},
|
||||
{'name': 'C5', 'type': 'C.ar', 'charge': -0.02721768449096584, 'radius': 1.87},
|
||||
{'name': 'N5', 'type': 'N.am', 'charge': -0.7179288700589408, 'radius': 1.4},
|
||||
{'name': 'O5', 'type': 'O.2', 'charge': -0.2884010361503686, 'radius': 1.52},
|
||||
{'name': 'C6', 'type': 'C.ar', 'charge': 0.0753432557874654, 'radius': 1.87},
|
||||
{'name': 'O6', 'type': 'O.2', 'charge': -0.2912545916584642, 'radius': 1.52},
|
||||
{'name': 'C7', 'type': 'C.ar', 'charge': -0.06673754373256466, 'radius': 1.87},
|
||||
{'name': 'C8', 'type': 'C.ar', 'charge': -0.11391059914410395, 'radius': 1.87},
|
||||
{'name': 'C9', 'type': 'C.ar', 'charge': -0.10324637080138911, 'radius': 1.87},
|
||||
{'name': 'C10', 'type': 'C.3', 'charge': 0.0955779782243598, 'radius': 1.87},
|
||||
{'name': 'C11', 'type': 'C.2', 'charge': 0.13325937240601735, 'radius': 1.87},
|
||||
{'name': 'C12', 'type': 'C.3', 'charge': -0.007454479991213576, 'radius': 1.87},
|
||||
{'name': 'C13', 'type': 'C.2', 'charge': 0.1300074666489752, 'radius': 1.87},
|
||||
{'name': 'C14', 'type': 'C.3', 'charge': 0.03316079200653884, 'radius': 1.87},
|
||||
{'name': 'C15', 'type': 'C.3', 'charge': 0.1162788489650129, 'radius': 1.87},
|
||||
{'name': 'C16', 'type': 'C.3', 'charge': -0.05012048448800629, 'radius': 1.87},
|
||||
{'name': 'C17', 'type': 'C.2', 'charge': 0.17629988149001455, 'radius': 1.87},
|
||||
{'name': 'C18', 'type': 'C.3', 'charge': 0.1273124481017021, 'radius': 1.87},
|
||||
{'name': 'C19', 'type': 'C.3', 'charge': 0.009718364614545697, 'radius': 1.87},
|
||||
{'name': 'C20', 'type': 'C.3', 'charge': 0.05373224349483613, 'radius': 1.87},
|
||||
{'name': 'C21', 'type': 'C.2', 'charge': 0.14236781888812639, 'radius': 1.87},
|
||||
{'name': 'C22', 'type': 'C.3', 'charge': -0.018858356195459093, 'radius': 1.87},
|
||||
{'name': 'C23', 'type': 'C.3', 'charge': -0.08872387572707603, 'radius': 1.87},
|
||||
{'name': 'C24', 'type': 'C.3', 'charge': -0.08872387572707603, 'radius': 1.87},
|
||||
{'name': 'C25', 'type': 'C.3', 'charge': -0.08872387572707603, 'radius': 1.87},
|
||||
{'name': 'C26', 'type': 'C.3', 'charge': 0.10593153852032608, 'radius': 1.87},
|
||||
{'name': 'C27', 'type': 'C.3', 'charge': -0.05782750620937734, 'radius': 1.87},
|
||||
{'name': 'C28', 'type': 'C.ar', 'charge': -0.09940049289330599, 'radius': 1.87},
|
||||
{'name': 'C29', 'type': 'C.ar', 'charge': -0.11788247675515531, 'radius': 1.87},
|
||||
{'name': 'C30', 'type': 'C.ar', 'charge': -0.12669321002628098, 'radius': 1.87},
|
||||
{'name': 'C31', 'type': 'C.ar', 'charge': -0.12840215383108972, 'radius': 1.87},
|
||||
{'name': 'C32', 'type': 'C.ar', 'charge': -0.12669321002628098, 'radius': 1.87},
|
||||
{'name': 'C33', 'type': 'C.ar', 'charge': -0.11788247675515531, 'radius': 1.87},
|
||||
{'name': 'HN2', 'type': 'H', 'charge': 0.47365062709293504, 'radius': 1.1},
|
||||
{'name': 'HN3', 'type': 'H', 'charge': 0.46813799183459115, 'radius': 1.1},
|
||||
{'name': 'HN5', 'type': 'H', 'charge': 0.4699450251195792, 'radius': 1.1},
|
||||
{'name': 'HO2', 'type': 'H', 'charge': 0.4135083335659837, 'radius': 1.1},
|
||||
{'name':'H1', 'type': 'H', 'charge': 0.1930651515377243, 'radius': 1.1},
|
||||
{'name': 'H2', 'type': 'H', 'charge': 0.14930498376978826, 'radius': 1.1},
|
||||
{'name': 'H5', 'type': 'H', 'charge': 0.2004887586723136, 'radius': 1.1},
|
||||
{'name': 'H7', 'type': 'H', 'charge': 0.1568207646303434, 'radius': 1.1},
|
||||
{'name': 'H8', 'type': 'H', 'charge': 0.13234810374569977, 'radius': 1.1},
|
||||
{'name': 'H9', 'type': 'H', 'charge': 0.13832988708343302, 'radius': 1.1},
|
||||
{'name': '1H10', 'type': 'H', 'charge': 0.2090610332096663, 'radius': 1.1},
|
||||
{'name': '2H10', 'type': 'H', 'charge': 0.2090610332096663, 'radius': 1.1},
|
||||
{'name': '1H12', 'type': 'H', 'charge': 0.12111462041395545, 'radius': 1.1},
|
||||
{'name': '2H12', 'type': 'H', 'charge': 0.12111462041395545, 'radius': 1.1},
|
||||
{'name': 'H14', 'type': 'H', 'charge': 0.1675599590015787, 'radius': 1.1},
|
||||
{'name': 'H15', 'type': 'H', 'charge': 0.22760838606623204, 'radius': 1.1},
|
||||
{'name': '1H16', 'type': 'H', 'charge': 0.0852867334715187, 'radius': 1.1},
|
||||
{'name': '2H16', 'type': 'H', 'charge': 0.0852867334715187, 'radius': 1.1},
|
||||
{'name': 'H18', 'type': 'H', 'charge': 0.24317031751195953, 'radius': 1.1},
|
||||
{'name': '1H19', 'type': 'H', 'charge': 0.12776560931027464, 'radius': 1.1},
|
||||
{'name': '2H19', 'type': 'H', 'charge': 0.12776560931027464, 'radius': 1.1},
|
||||
{'name': '1H20', 'type': 'H', 'charge': 0.19565330098691133, 'radius': 1.1},
|
||||
{'name': '2H20', 'type': 'H', 'charge': 0.19565330098691133, 'radius': 1.1},
|
||||
{'name': '1H23', 'type': 'H', 'charge': 0.05671902293773316, 'radius': 1.1},
|
||||
{'name': '2H23', 'type': 'H', 'charge': 0.05671902293773316, 'radius': 1.1},
|
||||
{'name': '3H23', 'type': 'H', 'charge': 0.05671902293773316, 'radius': 1.1},
|
||||
{'name': '1H24', 'type': 'H', 'charge': 0.05671902293773316, 'radius': 1.1},
|
||||
{'name': '2H24', 'type': 'H', 'charge': 0.05671902293773316, 'radius': 1.1},
|
||||
{'name': '3H24', 'type': 'H', 'charge': 0.05671902293773316, 'radius': 1.1},
|
||||
{'name': '1H25', 'type': 'H', 'charge': 0.05671902293773316, 'radius': 1.1},
|
||||
{'name': '2H25', 'type': 'H', 'charge': 0.05671902293773316, 'radius': 1.1},
|
||||
{'name': '3H25', 'type': 'H', 'charge': 0.05671902293773316, 'radius': 1.1},
|
||||
{'name': 'H26', 'type': 'H', 'charge': 0.21276929701184144, 'radius': 1.1},
|
||||
{'name': '1H27', 'type': 'H', 'charge': 0.0838296767957033, 'radius': 1.1},
|
||||
{'name': '2H27', 'type': 'H', 'charge': 0.0838296767957033, 'radius': 1.1},
|
||||
{'name': '3H27', 'type': 'H', 'charge': 0.0838296767957033, 'radius': 1.1},
|
||||
{'name': 'H29', 'type': 'H', 'charge': 0.1344214537548114, 'radius': 1.1},
|
||||
{'name': 'H30', 'type': 'H', 'charge': 0.12944135663694809, 'radius': 1.1},
|
||||
{'name': 'H31', 'type': 'H', 'charge': 0.12895177093126134, 'radius': 1.1},
|
||||
{'name': 'H32', 'type': 'H', 'charge': 0.12944135663694809, 'radius': 1.1},
|
||||
{'name': 'H33', 'type': 'H', 'charge': 0.1344214537548114, 'radius': 1.1}],
|
||||
"1QBS-ligand.mol2": [
|
||||
{'name': 'C1', 'type': 'C.2', 'charge': 0.2819290256115998, 'radius': 1.87},
|
||||
{'name': 'C3', 'type': 'C.3', 'charge': 0.044938629062860544, 'radius': 1.87},
|
||||
{'name': 'C4', 'type': 'C.3', 'charge': 0.029905546428555488, 'radius': 1.87},
|
||||
{'name': 'C5', 'type': 'C.3', 'charge': 0.029905546428555488, 'radius': 1.87},
|
||||
{'name': 'C6', 'type': 'C.3', 'charge': 0.044938629062860544, 'radius': 1.87},
|
||||
{'name': 'C20', 'type': 'C.3', 'charge': 0.02388740859601932, 'radius': 1.87},
|
||||
{'name': 'C21', 'type': 'C.ar', 'charge': -0.06923087776665914, 'radius': 1.87},
|
||||
{'name': 'C22', 'type': 'C.ar', 'charge': -0.10856468032765192, 'radius': 1.87},
|
||||
{'name': 'C23', 'type': 'C.ar', 'charge': -0.11036338907520785, 'radius': 1.87},
|
||||
{'name': 'C24', 'type': 'C.ar', 'charge': -0.08244776383718133, 'radius': 1.87},
|
||||
{'name': 'C25', 'type': 'C.ar', 'charge': -0.11036338907520785, 'radius': 1.87},
|
||||
{'name': 'C26', 'type': 'C.ar', 'charge': -0.10856468032765192, 'radius': 1.87},
|
||||
{'name': 'C27', 'type': 'C.3', 'charge': -0.021297911008685094, 'radius': 1.87},
|
||||
{'name': 'C30', 'type': 'C.3', 'charge': -0.04323885537049762, 'radius': 1.87},
|
||||
{'name': 'C31', 'type': 'C.ar', 'charge': -0.09772541979676261, 'radius': 1.87},
|
||||
{'name': 'C32', 'type': 'C.ar', 'charge': -0.11774626937995367, 'radius': 1.87},
|
||||
{'name': 'C33', 'type': 'C.ar', 'charge': -0.12668933876013122, 'radius': 1.87},
|
||||
{'name': 'C34', 'type': 'C.ar', 'charge': -0.12840215383108972, 'radius': 1.87},
|
||||
{'name': 'C35', 'type': 'C.ar', 'charge': -0.12668933876013122, 'radius': 1.87},
|
||||
{'name': 'C36', 'type': 'C.ar', 'charge': -0.11774626937995367, 'radius': 1.87},
|
||||
{'name': 'C60', 'type': 'C.3', 'charge': -0.04323885537049762, 'radius': 1.87},
|
||||
{'name': 'C61', 'type': 'C.ar', 'charge': -0.09772541979676261, 'radius': 1.87},
|
||||
{'name': 'C62', 'type': 'C.ar', 'charge': -0.11774626937995367, 'radius': 1.87},
|
||||
{'name': 'C63', 'type': 'C.ar', 'charge': -0.12668933876013122, 'radius': 1.87},
|
||||
{'name': 'C64', 'type': 'C.ar', 'charge': -0.12840215383108972, 'radius': 1.87},
|
||||
{'name': 'C65', 'type': 'C.ar', 'charge': -0.12668933876013122, 'radius': 1.87},
|
||||
{'name': 'C66', 'type': 'C.ar', 'charge': -0.11774626937995367, 'radius': 1.87},
|
||||
{'name': 'C70', 'type': 'C.3', 'charge': 0.02388740859601932, 'radius': 1.87},
|
||||
{'name': 'C71', 'type': 'C.ar', 'charge': -0.06923087776665914, 'radius': 1.87},
|
||||
{'name': 'C72', 'type': 'C.ar', 'charge': -0.10856468032765192, 'radius': 1.87},
|
||||
{'name': 'C73', 'type': 'C.ar', 'charge': -0.11036338907520785, 'radius': 1.87},
|
||||
{'name': 'C74', 'type': 'C.ar', 'charge': -0.08244776383718133, 'radius': 1.87},
|
||||
{'name': 'C75', 'type': 'C.ar', 'charge': -0.11036338907520785, 'radius': 1.87},
|
||||
{'name': 'C76', 'type': 'C.ar', 'charge': -0.10856468032765192, 'radius': 1.87},
|
||||
{'name': 'C77', 'type': 'C.3', 'charge': -0.021297911008685094, 'radius': 1.87},
|
||||
{'name': 'N2', 'type': 'N.am', 'charge': -0.7121260761527837, 'radius': 1.4},
|
||||
{'name': 'N7', 'type': 'N.am', 'charge': -0.7121260761527837, 'radius': 1.4},
|
||||
{'name': 'O1', 'type': 'O.2', 'charge': -0.19835509547371977, 'radius': 1.52},
|
||||
{'name': 'O4', 'type': 'O.3', 'charge': -0.6060823059727466, 'radius': 1.52},
|
||||
{'name': 'O5', 'type': 'O.3', 'charge': -0.6060823059727466, 'radius': 1.52},
|
||||
{'name': 'O27', 'type': 'O.3', 'charge': -0.6190964861641765, 'radius': 1.52},
|
||||
{'name': 'O77', 'type': 'O.3', 'charge': -0.6190964861641765, 'radius': 1.52},
|
||||
{'name': 'H1', 'type': 'H', 'charge': 0.1939484454048374, 'radius': 1.1},
|
||||
{'name': 'H2', 'type': 'H', 'charge': 0.1783837779801701, 'radius': 1.1},
|
||||
{'name': 'H3', 'type': 'H', 'charge': 0.1783837779801701, 'radius': 1.1},
|
||||
{'name': 'H4', 'type': 'H', 'charge': 0.1939484454048374, 'radius': 1.1},
|
||||
{'name': 'H5', 'type': 'H', 'charge': 0.1660607436631621, 'radius': 1.1},
|
||||
{'name': 'H6', 'type': 'H', 'charge': 0.1660607436631621, 'radius': 1.1},
|
||||
{'name': 'H7', 'type': 'H', 'charge': 0.13696512588510704, 'radius': 1.1},
|
||||
{'name': 'H8', 'type': 'H', 'charge': 0.13656070949143695, 'radius': 1.1},
|
||||
{'name': 'H9', 'type': 'H', 'charge': 0.13656070949143695, 'radius': 1.1},
|
||||
{'name': 'H10', 'type': 'H', 'charge': 0.13696512588510704, 'radius': 1.1},
|
||||
{'name': 'H11', 'type': 'H', 'charge': 0.1336796298532153, 'radius': 1.1},
|
||||
{'name': 'H12', 'type': 'H', 'charge': 0.1336796298532153, 'radius': 1.1},
|
||||
{'name': 'H13', 'type': 'H', 'charge': 0.08892832134853815, 'radius': 1.1},
|
||||
{'name': 'H14', 'type': 'H', 'charge': 0.08892832134853815, 'radius': 1.1},
|
||||
{'name': 'H15', 'type': 'H', 'charge': 0.13442892363549896, 'radius': 1.1},
|
||||
{'name': 'H16', 'type': 'H', 'charge': 0.12944135663694809, 'radius': 1.1},
|
||||
{'name': 'H17', 'type': 'H', 'charge': 0.12895177093126134, 'radius': 1.1},
|
||||
{'name': 'H18', 'type': 'H', 'charge': 0.12944135663694809, 'radius': 1.1},
|
||||
{'name': 'H19', 'type': 'H', 'charge': 0.13442892363549896, 'radius': 1.1},
|
||||
{'name': 'H20', 'type': 'H', 'charge': 0.08892832134853815, 'radius': 1.1},
|
||||
{'name': 'H21', 'type': 'H', 'charge': 0.08892832134853815, 'radius': 1.1},
|
||||
{'name': 'H22', 'type': 'H', 'charge': 0.13442892363549896, 'radius': 1.1},
|
||||
{'name': 'H23', 'type': 'H', 'charge': 0.12944135663694809, 'radius': 1.1},
|
||||
{'name': 'H24', 'type': 'H', 'charge': 0.12895177093126134, 'radius': 1.1},
|
||||
{'name': 'H25', 'type': 'H', 'charge': 0.12944135663694809, 'radius': 1.1},
|
||||
{'name': 'H26', 'type': 'H', 'charge': 0.13442892363549896, 'radius': 1.1},
|
||||
{'name': 'H27', 'type': 'H', 'charge': 0.1660607436631621, 'radius': 1.1},
|
||||
{'name': 'H28', 'type': 'H', 'charge': 0.1660607436631621, 'radius': 1.1},
|
||||
{'name': 'H29', 'type': 'H', 'charge': 0.13696512588510704, 'radius': 1.1},
|
||||
{'name': 'H30', 'type': 'H', 'charge': 0.13656070949143695, 'radius': 1.1},
|
||||
{'name': 'H31', 'type': 'H', 'charge': 0.13656070949143695, 'radius': 1.1},
|
||||
{'name': 'H32', 'type': 'H', 'charge': 0.13696512588510704, 'radius': 1.1},
|
||||
{'name': 'H33', 'type': 'H', 'charge': 0.1336796298532153, 'radius': 1.1},
|
||||
{'name': 'H34', 'type': 'H', 'charge': 0.1336796298532153, 'radius': 1.1},
|
||||
{'name': 'H35', 'type': 'H', 'charge': 0.4089032076940611, 'radius': 1.1},
|
||||
{'name': 'H36', 'type': 'H', 'charge': 0.4089032076940611, 'radius': 1.1},
|
||||
{'name': 'H37', 'type': 'H', 'charge': 0.40353983279195227, 'radius': 1.1},
|
||||
{'name': 'H38', 'type': 'H', 'charge': 0.40353983279195227, 'radius': 1.1}],
|
||||
"1US0-ligand.mol2": [
|
||||
{'name': 'C2', 'type': 'C.ar', 'charge': -0.011692507946738866, 'radius': 1.87},
|
||||
{'name': 'C3', 'type': 'C.ar', 'charge': -0.07564532850595106, 'radius': 1.87},
|
||||
{'name': 'C4', 'type': 'C.ar', 'charge': 0.0995106215449818, 'radius': 1.87},
|
||||
{'name': 'C5', 'type': 'C.ar', 'charge': 0.087912610051304, 'radius': 1.87},
|
||||
{'name': 'C6', 'type': 'C.ar', 'charge': -0.06822502752899269, 'radius': 1.87},
|
||||
{'name': 'C7', 'type': 'C.ar', 'charge': 0.071206877934909, 'radius': 1.87},
|
||||
{'name': 'BR8', 'type': 'Br', 'charge': -0.1781415724110881, 'radius': 1.85},
|
||||
{'name': 'F9', 'type': 'F', 'charge': -0.24609828999108224, 'radius': 2.4},
|
||||
{'name': 'C11', 'type': 'C.2', 'charge': 0.01969593460035858, 'radius': 1.87},
|
||||
{'name': 'C13', 'type': 'C.3', 'charge': -0.012644223822613768, 'radius': 1.87},
|
||||
{'name': 'F14', 'type': 'F', 'charge': -0.24298404863346873, 'radius': 2.4},
|
||||
{'name': 'O15', 'type': 'O.3', 'charge': -0.564853763228142, 'radius': 1.52},
|
||||
{'name': 'S16', 'type': 'S.3', 'charge': -0.08677321834382315, 'radius': 2.15},
|
||||
{'name': 'N17', 'type': 'N.pl3', 'charge': -0.5406144014197267, 'radius': 1.4},
|
||||
{'name': 'C20', 'type': 'C.3', 'charge': 0.11379374529001238, 'radius': 1.87},
|
||||
{'name': 'C24', 'type': 'C.ar', 'charge': -0.025165867794008426, 'radius': 1.87},
|
||||
{'name': 'C25', 'type': 'C.ar', 'charge': 0.05247378966494793, 'radius': 1.87},
|
||||
{'name': 'C26', 'type': 'C.ar', 'charge': -0.09820934352177407, 'radius': 1.87},
|
||||
{'name': 'C27', 'type': 'C.ar', 'charge': 0.09943434454444673, 'radius': 1.87},
|
||||
{'name': 'C28', 'type': 'C.ar', 'charge': -0.030058244343191105, 'radius': 1.87},
|
||||
{'name': 'C29', 'type': 'C.ar', 'charge': -0.08190135488592247, 'radius': 1.87},
|
||||
{'name': 'C32', 'type': 'C.2', 'charge': 0.13523301177634597, 'radius': 1.87},
|
||||
{'name': 'O33', 'type': 'O.co2', 'charge': -0.6823845278785808, 'radius': 1.76},
|
||||
{'name': 'O34', 'type': 'O.co2', 'charge': -0.6823845278785808, 'radius': 1.76},
|
||||
{'name': 'H1', 'type': 'H', 'charge': 0.1785741592725812, 'radius': 1.1},
|
||||
{'name': 'H2', 'type': 'H', 'charge': 0.1460165676666413, 'radius': 1.1},
|
||||
{'name': 'H3', 'type': 'H', 'charge': 0.15178137252163487, 'radius': 1.1},
|
||||
{'name': 'H4', 'type': 'H', 'charge': 0.12305674443192938, 'radius': 1.1},
|
||||
{'name': 'H5', 'type': 'H', 'charge': 0.12305674443192938, 'radius': 1.1},
|
||||
{'name': 'H6', 'type': 'H', 'charge': 0.3361191041929824, 'radius': 1.1},
|
||||
{'name': 'H7', 'type': 'H', 'charge': 0.21824692354069947, 'radius': 1.1},
|
||||
{'name': 'H8', 'type': 'H', 'charge': 0.21824692354069947, 'radius': 1.1},
|
||||
{'name': 'H9', 'type': 'H', 'charge': 0.13902103205782942, 'radius': 1.1},
|
||||
{'name': 'H10', 'type': 'H', 'charge': 0.16785538090669733, 'radius': 1.1},
|
||||
{'name': 'H11', 'type': 'H', 'charge': 0.14654036016275432, 'radius': 1.1}],
|
||||
"acetate.mol2": [
|
||||
{'name': 'OAC', 'type': 'O.co2', 'charge': -0.6920003959699945, 'radius': 1.76},
|
||||
{'name': 'CAB', 'type': 'C.2', 'charge': 0.08786702981704235, 'radius': 1.87},
|
||||
{'name': 'OAD', 'type': 'O.co2', 'charge': -0.6920003959699945, 'radius': 1.76},
|
||||
{'name': 'CAA', 'type': 'C.3', 'charge': -0.007013553584021696, 'radius': 1.87},
|
||||
{'name': 'HAB', 'type': 'H', 'charge': 0.10104910523565629, 'radius': 1.1},
|
||||
{'name': 'HAC', 'type': 'H', 'charge': 0.10104910523565629, 'radius': 1.1},
|
||||
{'name': 'HAA', 'type': 'H', 'charge': 0.10104910523565629, 'radius': 1.1}],
|
||||
"acetonitrile.mol2": [
|
||||
{'name': 'NAC', 'type': 'N.1', 'charge': -0.3658493397941428, 'radius': 1.4},
|
||||
{'name': 'CAB', 'type': 'C.1', 'charge': 0.047166532439326746, 'radius': 1.87},
|
||||
{'name': 'CAA', 'type': 'C.3', 'charge': 0.0031209482290866543, 'radius': 1.87},
|
||||
{'name': 'HAB', 'type': 'H', 'charge': 0.10518728637524313, 'radius': 1.1},
|
||||
{'name': 'HAC', 'type': 'H', 'charge': 0.10518728637524313, 'radius': 1.1},
|
||||
{'name': 'HAA', 'type': 'H', 'charge': 0.10518728637524313, 'radius': 1.1}],
|
||||
"acetylcholine.mol2": [
|
||||
{'name': 'CAI', 'type': 'C.3', 'charge': -0.008419213752965279, 'radius': 1.87},
|
||||
{'name': 'HAK', 'type': 'H', 'charge': 0.09728030818644891, 'radius': 1.1},
|
||||
{'name': 'HAL', 'type': 'H', 'charge': 0.09728030818644891, 'radius': 1.1},
|
||||
{'name': 'HAM', 'type': 'H', 'charge': 0.09728030818644891, 'radius': 1.1},
|
||||
{'name': 'CAH', 'type': 'C.2', 'charge': 0.1545682666391745, 'radius': 1.87},
|
||||
{'name': 'OAB', 'type': 'O.2', 'charge': -0.27967627950752316, 'radius': 1.52},
|
||||
{'name': 'OAG', 'type': 'O.3', 'charge': -0.5429502778137623, 'radius': 1.52},
|
||||
{'name': 'CAF', 'type': 'C.3', 'charge': 0.037889841506971396, 'radius': 1.87},
|
||||
{'name': 'HAI', 'type': 'H', 'charge': 0.1710371780188628, 'radius': 1.1},
|
||||
{'name': 'HAJ', 'type': 'H', 'charge': 0.1710371780188628, 'radius': 1.1},
|
||||
{'name': 'CAE', 'type': 'C.3', 'charge': 0.0572339093088662, 'radius': 1.87},
|
||||
{'name': 'HAG', 'type': 'H', 'charge': 0.16582144135089144, 'radius': 1.1},
|
||||
{'name': 'HAH', 'type': 'H', 'charge': 0.16582144135089144, 'radius': 1.1},
|
||||
{'name': 'NAD', 'type': 'N.3', 'charge': -0.6101582744216567, 'radius': 1.4},
|
||||
{'name': 'CAJ', 'type': 'C.3', 'charge': 0.016251330821632083, 'radius': 1.87},
|
||||
{'name': 'HAO', 'type': 'H', 'charge': 0.13079998580857152, 'radius': 1.1},
|
||||
{'name': 'HAP', 'type': 'H', 'charge': 0.13079998580857152, 'radius': 1.1},
|
||||
{'name': 'HAN', 'type': 'H', 'charge': 0.13079998580857152, 'radius': 1.1},
|
||||
{'name': 'CAA', 'type': 'C.3', 'charge': 0.016251330821632083, 'radius': 1.87},
|
||||
{'name': 'HAB', 'type': 'H', 'charge': 0.13079998580857152, 'radius': 1.1},
|
||||
{'name': 'HAC', 'type': 'H', 'charge': 0.13079998580857152, 'radius': 1.1},
|
||||
{'name': 'HAA', 'type': 'H', 'charge': 0.13079998580857152, 'radius': 1.1},
|
||||
{'name': 'CAC', 'type': 'C.3', 'charge': 0.016251330821632083, 'radius': 1.87},
|
||||
{'name': 'HAE', 'type': 'H', 'charge': 0.13079998580857152, 'radius': 1.1},
|
||||
{'name': 'HAF', 'type': 'H', 'charge': 0.13079998580857152, 'radius': 1.1},
|
||||
{'name': 'HAD', 'type': 'H', 'charge': 0.13079998580857152, 'radius': 1.1}],
|
||||
"adp.mol2": [
|
||||
{'name': 'O2B', 'type': 'O.3', 'charge': -0.9292599002864984, 'radius': 1.52},
|
||||
{'name': 'PB', 'type': 'P.3', 'charge': 0.2901422925812394, 'radius': 1.8},
|
||||
{'name': 'O3B', 'type': 'O.3', 'charge': -0.15563495903544203, 'radius': 1.52},
|
||||
{'name': 'O1B', 'type': 'O.2', 'charge': -0.10031235497346548, 'radius': 1.52},
|
||||
{'name': 'O3A', 'type': 'O.3', 'charge': -0.22961271227927002, 'radius': 1.52},
|
||||
{'name': 'PA', 'type': 'P.3', 'charge': 0.20924046046691175, 'radius': 1.8},
|
||||
{'name': 'O2A', 'type': 'O.3', 'charge': -0.9415448332469695, 'radius': 1.52},
|
||||
{'name': 'O1A', 'type': 'O.2', 'charge': -0.11862974402094492, 'radius': 1.52},
|
||||
{'name': "O5'", 'type': 'O.3', 'charge': -0.46621302263040854, 'radius': 1.52},
|
||||
{'name': "C5'", 'type': 'C.3', 'charge': 0.0798878056064067, 'radius': 1.87},
|
||||
{'name': "H5'", 'type': 'H', 'charge': 0.18839134309240957, 'radius': 1.1},
|
||||
{'name': 'H5S', 'type': 'H', 'charge': 0.18839134309240957, 'radius': 1.1},
|
||||
{'name': "C4'", 'type': 'C.3', 'charge': 0.0695445224862847, 'radius': 1.87},
|
||||
{'name': "H4'", 'type': 'H', 'charge': 0.20776211836320221, 'radius': 1.1},
|
||||
{'name': "O4'", 'type': 'O.3', 'charge': -0.5870759018169631, 'radius': 1.52},
|
||||
{'name': "C3'", 'type': 'C.3', 'charge': 0.03852622354001534, 'radius': 1.87},
|
||||
{'name': "H3'", 'type': 'H', 'charge': 0.17992130819444715, 'radius': 1.1},
|
||||
{'name': "O3'", 'type': 'O.3', 'charge': -0.6050957763635193, 'radius': 1.52},
|
||||
{'name': 'H8L', 'type': 'H', 'charge': 0.408917570005205, 'radius': 1.1},
|
||||
{'name': "C2'", 'type': 'C.3', 'charge': 0.04785444900747468, 'radius': 1.87},
|
||||
{'name': "H2'", 'type': 'H', 'charge': 0.18698431697045484, 'radius': 1.1},
|
||||
{'name': "O2'", 'type': 'O.3', 'charge': -0.6030269458228865, 'radius': 1.52},
|
||||
{'name': 'H8M', 'type': 'H', 'charge': 0.40956200683924104, 'radius': 1.1},
|
||||
{'name': "C1'", 'type': 'C.3', 'charge': 0.1072884172431409, 'radius': 1.87},
|
||||
{'name': "H1'", 'type': 'H', 'charge': 0.25190824252954014, 'radius': 1.1},
|
||||
{'name': 'N9', 'type': 'N.ar', 'charge': -0.32267909962343944, 'radius': 1.4},
|
||||
{'name': 'C8', 'type': 'C.ar', 'charge': 0.03749022549830809, 'radius': 1.87},
|
||||
{'name': 'H8', 'type': 'H', 'charge': 0.24861896888732188, 'radius': 1.1},
|
||||
{'name': 'N7', 'type': 'N.ar', 'charge': -0.2902489369083555, 'radius': 1.4},
|
||||
{'name': 'C5', 'type': 'C.ar', 'charge': 0.15701292932781932, 'radius': 1.87},
|
||||
{'name': 'C4', 'type': 'C.ar', 'charge': 0.16341092847650182, 'radius': 1.87},
|
||||
{'name': 'N3', 'type': 'N.ar', 'charge': -0.28837259982632546, 'radius': 1.4},
|
||||
{'name': 'C2', 'type': 'C.ar', 'charge': 0.00966560470099504, 'radius': 1.87},
|
||||
{'name': 'H2', 'type': 'H', 'charge': 0.23340110948012485, 'radius': 1.1},
|
||||
{'name': 'N1', 'type': 'N.ar', 'charge': -0.3751603212355695, 'radius': 1.4},
|
||||
{'name': 'H1', 'type': 'H', 'charge': 0.2881016272229071, 'radius': 1.1},
|
||||
{'name': 'C6', 'type': 'C.ar', 'charge': 0.10850097968415028, 'radius': 1.87},
|
||||
{'name': 'N6', 'type': 'N.2', 'charge': -0.46957750571325696, 'radius': 1.4},
|
||||
{'name': 'H6', 'type': 'H', 'charge': 0.3719198204868037, 'radius': 1.1}],
|
||||
"anthracene.mol2": [
|
||||
{'name': 'CAB', 'type': 'C.ar', 'charge': -0.10948195185220932, 'radius': 1.87},
|
||||
{'name': 'HAB', 'type': 'H', 'charge': 0.13718781330297145, 'radius': 1.1},
|
||||
{'name': 'CAC', 'type': 'C.ar', 'charge': -0.05951797220652635, 'radius': 1.87},
|
||||
{'name': 'CAD', 'type': 'C.ar', 'charge': -0.090739817012503, 'radius': 1.87},
|
||||
{'name': 'HAD', 'type': 'H', 'charge': 0.14537539214857495, 'radius': 1.1},
|
||||
{'name': 'CAE', 'type': 'C.ar', 'charge': -0.05951797220652635, 'radius': 1.87},
|
||||
{'name': 'CAF', 'type': 'C.ar', 'charge': -0.10948195185220932, 'radius': 1.87},
|
||||
{'name': 'HAF', 'type': 'H', 'charge': 0.13718781330297145, 'radius': 1.1},
|
||||
{'name': 'CAG', 'type': 'C.ar', 'charge': -0.1252004685570065, 'radius': 1.87},
|
||||
{'name': 'HAG', 'type': 'H', 'charge': 0.12969479174473472, 'radius': 1.1},
|
||||
{'name': 'CAN', 'type': 'C.ar', 'charge': -0.1252004685570065, 'radius': 1.87},
|
||||
{'name': 'HAN', 'type': 'H', 'charge': 0.12969479174473472, 'radius': 1.1},
|
||||
{'name': 'CAM', 'type': 'C.ar', 'charge': -0.10948195185220932, 'radius': 1.87},
|
||||
{'name': 'HAM', 'type': 'H', 'charge': 0.13718781330297145, 'radius': 1.1},
|
||||
{'name': 'CAL', 'type': 'C.ar', 'charge': -0.05951797220652635, 'radius': 1.87},
|
||||
{'name': 'CAK', 'type': 'C.ar', 'charge': -0.090739817012503, 'radius': 1.87},
|
||||
{'name': 'HAK', 'type': 'H', 'charge': 0.14537539214857495, 'radius': 1.1},
|
||||
{'name': 'CAJ', 'type': 'C.ar', 'charge': -0.05951797220652635, 'radius': 1.87},
|
||||
{'name': 'CAI', 'type': 'C.ar', 'charge': -0.10948195185220932, 'radius': 1.87},
|
||||
{'name': 'HAI', 'type': 'H', 'charge': 0.13718781330297145, 'radius': 1.1},
|
||||
{'name': 'CAH', 'type': 'C.ar', 'charge': -0.1252004685570065, 'radius': 1.87},
|
||||
{'name': 'HAH', 'type': 'H', 'charge': 0.12969479174473472, 'radius': 1.1},
|
||||
{'name': 'CAA', 'type': 'C.ar', 'charge': -0.1252004685570065, 'radius': 1.87},
|
||||
{'name': 'HAA', 'type': 'H', 'charge': 0.12969479174473472, 'radius': 1.1}],
|
||||
"cyclohexane.mol2": [
|
||||
{'name': 'CAA', 'type': 'C.3', 'charge': -0.10295775116564801, 'radius': 1.87},
|
||||
{'name': 'HAA', 'type': 'H', 'charge': 0.051478875582824005, 'radius': 1.1},
|
||||
{'name': 'HAB', 'type': 'H', 'charge': 0.051478875582824005, 'radius': 1.1},
|
||||
{'name': 'CAB', 'type': 'C.3', 'charge': -0.10295775116564801, 'radius': 1.87},
|
||||
{'name': 'HAC', 'type': 'H', 'charge': 0.051478875582824005, 'radius': 1.1},
|
||||
{'name': 'HAD', 'type': 'H', 'charge': 0.051478875582824005, 'radius': 1.1},
|
||||
{'name': 'CAC', 'type': 'C.3', 'charge': -0.10295775116564801, 'radius': 1.87},
|
||||
{'name': 'HAE', 'type': 'H', 'charge': 0.051478875582824005, 'radius': 1.1},
|
||||
{'name': 'HAF', 'type': 'H', 'charge': 0.051478875582824005, 'radius': 1.1},
|
||||
{'name': 'CAF', 'type': 'C.3', 'charge': -0.10295775116564801, 'radius': 1.87},
|
||||
{'name': 'HAK', 'type': 'H', 'charge': 0.051478875582824005, 'radius': 1.1},
|
||||
{'name': 'HAL', 'type': 'H', 'charge': 0.051478875582824005, 'radius': 1.1},
|
||||
{'name': 'CAE', 'type': 'C.3', 'charge': -0.10295775116564801, 'radius': 1.87},
|
||||
{'name': 'HAI', 'type': 'H', 'charge': 0.051478875582824005, 'radius': 1.1},
|
||||
{'name': 'HAJ', 'type': 'H', 'charge': 0.051478875582824005, 'radius': 1.1},
|
||||
{'name': 'CAD', 'type': 'C.3', 'charge': -0.10295775116564801, 'radius': 1.87},
|
||||
{'name': 'HAH', 'type': 'H', 'charge': 0.051478875582824005, 'radius': 1.1},
|
||||
{'name': 'HAG', 'type': 'H', 'charge': 0.051478875582824005, 'radius': 1.1}],
|
||||
"ethanol.mol2": [
|
||||
{'name': 'CAA', 'type': 'C.3', 'charge': -0.09830853015557071, 'radius': 1.87},
|
||||
{'name': 'HAA', 'type': 'H', 'charge': 0.04965533009730527, 'radius': 1.1},
|
||||
{'name': 'HAB', 'type': 'H', 'charge': 0.04965533009730527, 'radius': 1.1},
|
||||
{'name': 'HAC', 'type': 'H', 'charge': 0.04965533009730527, 'radius': 1.1},
|
||||
{'name': 'CAB', 'type': 'C.3', 'charge': -0.05333201263132795, 'radius': 1.87},
|
||||
{'name': 'HAD', 'type': 'H', 'charge': 0.1136006498229285, 'radius': 1.1},
|
||||
{'name': 'HAE', 'type': 'H', 'charge': 0.1136006498229285, 'radius': 1.1},
|
||||
{'name': 'OAC', 'type': 'O.3', 'charge': -0.6256712436819194, 'radius': 1.52},
|
||||
{'name': 'HAF', 'type': 'H', 'charge': 0.4011444965310452, 'radius': 1.1}],
|
||||
"fatty-acid.mol2": [
|
||||
{'name': 'OAA', 'type': 'O.co2', 'charge': -0.6905415761361866, 'radius': 1.76},
|
||||
{'name': 'CAB', 'type': 'C.2', 'charge': 0.09491530638614049, 'radius': 1.87},
|
||||
{'name': 'OAL', 'type': 'O.co2', 'charge': -0.6905415761361866, 'radius': 1.76},
|
||||
{'name': 'CAC', 'type': 'C.3', 'charge': 0.012573264939255872, 'radius': 1.87},
|
||||
{'name': 'HAC', 'type': 'H', 'charge': 0.11848768797200306, 'radius': 1.1},
|
||||
{'name': 'HAD', 'type': 'H', 'charge': 0.11848768797200306, 'radius': 1.1},
|
||||
{'name': 'CAD', 'type': 'C.3', 'charge': -0.07742980670292797, 'radius': 1.87},
|
||||
{'name': 'HAE', 'type': 'H', 'charge': 0.06140059278092227, 'radius': 1.1},
|
||||
{'name': 'HAF', 'type': 'H', 'charge': 0.06140059278092227, 'radius': 1.1},
|
||||
{'name': 'CAE', 'type': 'C.3', 'charge': -0.076959643935905, 'radius': 1.87},
|
||||
{'name': 'HAG', 'type': 'H', 'charge': 0.07285165771612633, 'radius': 1.1},
|
||||
{'name': 'HAH', 'type': 'H', 'charge': 0.07285165771612633, 'radius': 1.1},
|
||||
{'name': 'CAF', 'type': 'C.2', 'charge': -0.24236491728150775, 'radius': 1.87},
|
||||
{'name': 'HAI', 'type': 'H', 'charge': 0.16485599597989423, 'radius': 1.1},
|
||||
{'name': 'CAG', 'type': 'C.2', 'charge': -0.2426026937449157, 'radius': 1.87},
|
||||
{'name': 'HAJ', 'type': 'H', 'charge': 0.1648388876026803, 'radius': 1.1},
|
||||
{'name': 'CAH', 'type': 'C.3', 'charge': -0.07965667787077134, 'radius': 1.87},
|
||||
{'name': 'HAK', 'type': 'H', 'charge': 0.07232360507910963, 'radius': 1.1},
|
||||
{'name': 'HAL', 'type': 'H', 'charge': 0.07232360507910963, 'radius': 1.1},
|
||||
{'name': 'CAI', 'type': 'C.3', 'charge': -0.09862724378017657, 'radius': 1.87},
|
||||
{'name': 'HAM', 'type': 'H', 'charge': 0.05403847507524275, 'radius': 1.1},
|
||||
{'name': 'HAN', 'type': 'H', 'charge': 0.05403847507524275, 'radius': 1.1},
|
||||
{'name': 'CAJ', 'type': 'C.3', 'charge': -0.10608184708836539, 'radius': 1.87},
|
||||
{'name': 'HAO', 'type': 'H', 'charge': 0.04966180988232633, 'radius': 1.1},
|
||||
{'name': 'HAP', 'type': 'H', 'charge': 0.04966180988232633, 'radius': 1.1},
|
||||
{'name': 'CAK', 'type': 'C.3', 'charge': -0.11173869603286389, 'radius': 1.87},
|
||||
{'name': 'HAR', 'type': 'H', 'charge': 0.04061118893012504, 'radius': 1.1},
|
||||
{'name': 'HAS', 'type': 'H', 'charge': 0.04061118893012504, 'radius': 1.1},
|
||||
{'name': 'HAQ', 'type': 'H', 'charge': 0.04061118893012504, 'radius': 1.1}],
|
||||
"glycerol.mol2": [
|
||||
{'name': 'OAB', 'type': 'O.3', 'charge': -0.6193219106971865, 'radius': 1.52},
|
||||
{'name': 'HAG', 'type': 'H', 'charge': 0.4033320347133161, 'radius': 1.1},
|
||||
{'name': 'CAA', 'type': 'C.3', 'charge': -0.025227212803925057, 'radius': 1.87},
|
||||
{'name': 'HAA', 'type': 'H', 'charge': 0.1316040991547254, 'radius': 1.1},
|
||||
{'name': 'HAB', 'type': 'H', 'charge': 0.1316040991547254, 'radius': 1.1},
|
||||
{'name': 'CAC', 'type': 'C.3', 'charge': -0.00300604112002907, 'radius': 1.87},
|
||||
{'name': 'HAC', 'type': 'H', 'charge': 0.16288785945019288, 'radius': 1.1},
|
||||
{'name': 'OAD', 'type': 'O.3', 'charge': -0.6115908338990877, 'radius': 1.52},
|
||||
{'name': 'HAD', 'type': 'H', 'charge': 0.4077267965256133, 'radius': 1.1},
|
||||
{'name': 'CAE', 'type': 'C.3', 'charge': -0.025227212803925054, 'radius': 1.87},
|
||||
{'name': 'HAE', 'type': 'H', 'charge': 0.1316040991547254, 'radius': 1.1},
|
||||
{'name': 'HAF', 'type': 'H', 'charge': 0.1316040991547254, 'radius': 1.1},
|
||||
{'name': 'OAF', 'type': 'O.3', 'charge': -0.6193219106971865, 'radius': 1.52},
|
||||
{'name': 'HAH', 'type': 'H', 'charge': 0.4033320347133161, 'radius': 1.1}],
|
||||
"naphthalene.mol2": [
|
||||
{'name': 'CAB', 'type': 'C.ar', 'charge': -0.10985826436427909, 'radius': 1.87},
|
||||
{'name': 'HAB', 'type': 'H', 'charge': 0.13714843913419308, 'radius': 1.1},
|
||||
{'name': 'CAC', 'type': 'C.ar', 'charge': -0.06352790423000582, 'radius': 1.87},
|
||||
{'name': 'CAD', 'type': 'C.ar', 'charge': -0.10985826436427909, 'radius': 1.87},
|
||||
{'name': 'HAD', 'type': 'H', 'charge': 0.13714843913419308, 'radius': 1.1},
|
||||
{'name': 'CAE', 'type': 'C.ar', 'charge': -0.12522022371734542, 'radius': 1.87},
|
||||
{'name': 'HAE', 'type': 'H', 'charge': 0.1296940010624343, 'radius': 1.1},
|
||||
{'name': 'CAJ', 'type': 'C.ar', 'charge': -0.12522022371734542, 'radius': 1.87},
|
||||
{'name': 'HAJ', 'type': 'H', 'charge': 0.1296940010624343, 'radius': 1.1},
|
||||
{'name': 'CAI', 'type': 'C.ar', 'charge': -0.10985826436427909, 'radius': 1.87},
|
||||
{'name': 'HAI', 'type': 'H', 'charge': 0.13714843913419308, 'radius': 1.1},
|
||||
{'name': 'CAH', 'type': 'C.ar', 'charge': -0.06352790423000582, 'radius': 1.87},
|
||||
{'name': 'CAG', 'type': 'C.ar', 'charge': -0.10985826436427909, 'radius': 1.87},
|
||||
{'name': 'HAG', 'type': 'H', 'charge': 0.13714843913419308, 'radius': 1.1},
|
||||
{'name': 'CAF', 'type': 'C.ar', 'charge': -0.12522022371734542, 'radius': 1.87},
|
||||
{'name': 'HAF', 'type': 'H', 'charge': 0.1296940010624343, 'radius': 1.1},
|
||||
{'name': 'CAA', 'type': 'C.ar', 'charge': -0.12522022371734542, 'radius': 1.87},
|
||||
{'name': 'HAA', 'type': 'H', 'charge': 0.1296940010624343, 'radius': 1.1}],
|
||||
"pyrrole.mol2": [
|
||||
{'name': 'CAE', 'type': 'C.3', 'charge': -0.02725132001441914, 'radius': 1.87},
|
||||
{'name': 'HAE', 'type': 'H', 'charge': 0.104834463409739, 'radius': 1.1},
|
||||
{'name': 'HAF', 'type': 'H', 'charge': 0.104834463409739, 'radius': 1.1},
|
||||
{'name': 'CAD', 'type': 'C.2', 'charge': -0.19753848158167037, 'radius': 1.87},
|
||||
{'name': 'HAD', 'type': 'H', 'charge': 0.18534981863154645, 'radius': 1.1},
|
||||
{'name': 'CAA', 'type': 'C.2', 'charge': -0.1112561716335608, 'radius': 1.87},
|
||||
{'name': 'HAA', 'type': 'H', 'charge': 0.2699321111667989, 'radius': 1.1},
|
||||
{'name': 'NAB', 'type': 'N.2', 'charge': -0.44475473234270757, 'radius': 1.4},
|
||||
{'name': 'CAC', 'type': 'C.2', 'charge': -0.13358085588726296, 'radius': 1.87},
|
||||
{'name': 'HAC', 'type': 'H', 'charge': 0.24943070484179752, 'radius': 1.1}],
|
||||
"tetramethylammonium.mol2": [
|
||||
{'name': 'CAA', 'type': 'C.3', 'charge': 0.013840200623221964, 'radius': 1.87},
|
||||
{'name': 'HAA', 'type': 'H', 'charge': 0.12997929051575582, 'radius': 1.1},
|
||||
{'name': 'HAB', 'type': 'H', 'charge': 0.12997929051575582, 'radius': 1.1},
|
||||
{'name': 'HAC', 'type': 'H', 'charge': 0.12997929051575582, 'radius': 1.1},
|
||||
{'name': 'NAC', 'type': 'N.3', 'charge': -0.6151122886819584, 'radius': 1.4},
|
||||
{'name': 'CAB', 'type': 'C.3', 'charge': 0.013840200623221978, 'radius': 1.87},
|
||||
{'name': 'HAE', 'type': 'H', 'charge': 0.12997929051575582, 'radius': 1.1},
|
||||
{'name': 'HAF', 'type': 'H', 'charge': 0.12997929051575582, 'radius': 1.1},
|
||||
{'name': 'HAD', 'type': 'H', 'charge': 0.12997929051575582, 'radius': 1.1},
|
||||
{'name': 'CAE', 'type': 'C.3', 'charge': 0.013840200623221978, 'radius': 1.87},
|
||||
{'name': 'HAK', 'type': 'H', 'charge': 0.12997929051575582, 'radius': 1.1},
|
||||
{'name': 'HAL', 'type': 'H', 'charge': 0.12997929051575582, 'radius': 1.1},
|
||||
{'name': 'HAJ', 'type': 'H', 'charge': 0.12997929051575582, 'radius': 1.1},
|
||||
{'name': 'CAD', 'type': 'C.3', 'charge': 0.013840200623221978, 'radius': 1.87},
|
||||
{'name': 'HAH', 'type': 'H', 'charge': 0.12997929051575582, 'radius': 1.1},
|
||||
{'name': 'HAI', 'type': 'H', 'charge': 0.12997929051575582, 'radius': 1.1},
|
||||
{'name': 'HAG', 'type': 'H', 'charge': 0.12997929051575582, 'radius': 1.1}]
|
||||
}
|
||||
198
pdb2pqr/tests/ligand_test.py
Normal file
198
pdb2pqr/tests/ligand_test.py
Normal file
@@ -0,0 +1,198 @@
|
||||
"""Tests for ligand functionality."""
|
||||
import logging
|
||||
from math import isclose
|
||||
from pathlib import Path
|
||||
import pytest
|
||||
import pandas as pd
|
||||
from numpy.testing import assert_almost_equal
|
||||
from pdb2pqr.ligand.mol2 import Mol2Molecule
|
||||
import common
|
||||
from ligand_results import TORSION_RESULTS, RING_RESULTS
|
||||
from ligand_results import FORMAL_CHARGE_RESULTS, PARAMETER_RESULTS
|
||||
|
||||
|
||||
_LOGGER = logging.getLogger(__name__)
|
||||
_LOGGER.warning("Need functional and regression test coverage for --ligand")
|
||||
|
||||
|
||||
ALL_LIGANDS = set(TORSION_RESULTS) | set(RING_RESULTS)
|
||||
ALL_LIGANDS |= {
|
||||
"1HPX-ligand.mol2", "1QBS-ligand.mol2", "1US0-ligand.mol2", "adp.mol2",
|
||||
"acetate.mol2"}
|
||||
ALL_LIGANDS = sorted(list(ALL_LIGANDS))
|
||||
|
||||
|
||||
@pytest.mark.parametrize("input_mol2", ALL_LIGANDS)
|
||||
def test_assign_parameters(input_mol2):
|
||||
"""Testing basic aspects of code breaking."""
|
||||
ligand = Mol2Molecule()
|
||||
mol2_path = Path("tests/data") / input_mol2
|
||||
with open(mol2_path, "rt") as mol2_file:
|
||||
ligand.read(mol2_file)
|
||||
old_total_charge = 0
|
||||
for atom in ligand.atoms.values():
|
||||
old_total_charge += atom.formal_charge
|
||||
ligand.assign_parameters()
|
||||
new_total_charge = 0
|
||||
test_results = []
|
||||
for atom in ligand.atoms.values():
|
||||
test_row = {
|
||||
"name": atom.name, "type": atom.type, "charge": atom.charge,
|
||||
"radius": atom.radius}
|
||||
test_results.append(test_row)
|
||||
new_total_charge += atom.charge
|
||||
_LOGGER.debug("Test results: %s", test_results)
|
||||
test_results = pd.DataFrame(test_results)
|
||||
test_results = test_results.set_index("name")
|
||||
# _LOGGER.debug("Test results:\n%s", test_results.to_string())
|
||||
_LOGGER.info(
|
||||
"Total charge: %5.2f -> %5.2f", old_total_charge, new_total_charge)
|
||||
expected_results = pd.DataFrame(PARAMETER_RESULTS[input_mol2])
|
||||
expected_results = expected_results.set_index("name")
|
||||
assert_almost_equal(
|
||||
test_results["charge"].to_numpy(),
|
||||
expected_results["charge"].to_numpy())
|
||||
assert_almost_equal(
|
||||
test_results["radius"].to_numpy(),
|
||||
expected_results["radius"].to_numpy(), verbose=True)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("input_mol2", ALL_LIGANDS)
|
||||
def test_formal_charge(input_mol2):
|
||||
"""Testing formal charge calculation."""
|
||||
ligand = Mol2Molecule()
|
||||
mol2_path = Path("tests/data") / input_mol2
|
||||
with open(mol2_path, "rt") as mol2_file:
|
||||
ligand.read(mol2_file)
|
||||
expected_results = FORMAL_CHARGE_RESULTS[input_mol2]
|
||||
errors = []
|
||||
for iatom, atom in enumerate(ligand.atoms.values()):
|
||||
try:
|
||||
expected_charge = expected_results[iatom]
|
||||
except IndexError:
|
||||
err = (
|
||||
"Missing result for {a.name}, {a.type}, {a.formal_charge}")
|
||||
err = err.format(a=atom)
|
||||
raise IndexError(err)
|
||||
if not isclose(atom.formal_charge, expected_charge):
|
||||
err = (
|
||||
"Atom {0.name} {0.type} with bond order "
|
||||
"{0.bond_order}: expected {1}, got {2}")
|
||||
err = err.format(atom, expected_charge, atom.formal_charge)
|
||||
errors.append(err)
|
||||
if len(errors) > 0:
|
||||
err = "Errors in test values:\n%s" % "\n".join(errors)
|
||||
raise ValueError(err)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("input_mol2", TORSION_RESULTS)
|
||||
def test_torsions(input_mol2):
|
||||
"""Test assignment of torsion angles."""
|
||||
ligand = Mol2Molecule()
|
||||
mol2_path = Path("tests/data") / input_mol2
|
||||
with open(mol2_path, "rt") as mol2_file:
|
||||
ligand.read(mol2_file)
|
||||
test = set()
|
||||
# Only test heavy-atom torsions
|
||||
for torsion in ligand.torsions:
|
||||
has_hydrogen = False
|
||||
for atom in torsion:
|
||||
if atom.startswith("H"):
|
||||
has_hydrogen = True
|
||||
if not has_hydrogen:
|
||||
test.add(torsion)
|
||||
try:
|
||||
expected = TORSION_RESULTS[input_mol2]
|
||||
diff = test ^ expected
|
||||
if len(diff) > 0:
|
||||
err = (
|
||||
"Torsion test failed for {mol}:\n"
|
||||
"Got: {test}\n"
|
||||
"Expected: {expected}\n"
|
||||
"Difference: {diff}").format(
|
||||
mol=input_mol2, test=sorted(list(test)),
|
||||
expected=sorted(list(expected)), diff=sorted(list(diff)))
|
||||
raise ValueError(err)
|
||||
except KeyError:
|
||||
err = "No results for %s: %s", input_mol2, sorted(
|
||||
list(ligand.torsions))
|
||||
raise KeyError(err)
|
||||
|
||||
|
||||
@pytest.mark.parametrize("input_mol2", ALL_LIGANDS)
|
||||
def test_rings(input_mol2):
|
||||
"""Test assignment of torsion angles."""
|
||||
ligand = Mol2Molecule()
|
||||
mol2_path = Path("tests/data") / input_mol2
|
||||
with open(mol2_path, "rt") as mol2_file:
|
||||
ligand.read(mol2_file)
|
||||
test = ligand.rings
|
||||
try:
|
||||
benchmark = RING_RESULTS[input_mol2]
|
||||
except KeyError:
|
||||
err = "Missing expected results for %s: %s" % (
|
||||
input_mol2, test)
|
||||
raise KeyError(err)
|
||||
diff = test ^ benchmark
|
||||
if len(diff) > 0:
|
||||
err = (
|
||||
"Ring test failed for {mol}:\n"
|
||||
"Got: {test}\n"
|
||||
"Expected: {expected}\n"
|
||||
"Difference: {diff}").format(
|
||||
mol=input_mol2, test=sorted(list(test)),
|
||||
expected=sorted(list(benchmark)),
|
||||
diff=sorted(list(diff)))
|
||||
raise ValueError(err)
|
||||
for atom_name in ligand.atoms:
|
||||
atom = ligand.atoms[atom_name]
|
||||
if atom.num_rings > 0:
|
||||
str_ = "%d rings: %s" % (atom.num_rings, atom)
|
||||
_LOGGER.debug(str_)
|
||||
|
||||
|
||||
@pytest.mark.parametrize(
|
||||
"input_pdb", ["1HPX"], ids=str)
|
||||
def test_ligand_protein(input_pdb, tmp_path):
|
||||
"""PROPKA non-regression tests on proteins without ligands."""
|
||||
input_pdb = Path(input_pdb)
|
||||
ligand = Path("tests/data") / ("%s-ligand.mol2" % input_pdb.stem)
|
||||
args = "--log-level=INFO --ff=AMBER --drop-water --ligand=%s" % ligand
|
||||
output_pqr = Path(input_pdb).stem + ".pqr"
|
||||
_LOGGER.debug("Running test in %s", tmp_path)
|
||||
common.run_pdb2pqr(
|
||||
args=args, input_pdb=input_pdb, output_pqr=output_pqr,
|
||||
tmp_path=tmp_path)
|
||||
|
||||
|
||||
# @pytest.mark.parametrize(
|
||||
# "args, input_pdb, input_mol2, output_pqr",
|
||||
# [
|
||||
# pytest.param(
|
||||
# "--log-level=INFO --ff=AMBER",
|
||||
# "1HPX",
|
||||
# common.DATA_DIR / "1HPX-ligand.mol2",
|
||||
# "output.pqr",
|
||||
# id="1HPX-ligand AMBER"
|
||||
# ),
|
||||
# pytest.param(
|
||||
# "--log-level=INFO --ff=AMBER",
|
||||
# common.DATA_DIR / "1QBS.pdb",
|
||||
# common.DATA_DIR / "1QBS-ligand.mol2",
|
||||
# "output.pqr",
|
||||
# id="1QBS-ligand AMBER"
|
||||
# ),
|
||||
# pytest.param(
|
||||
# "--log-level=INFO --ff=AMBER",
|
||||
# common.DATA_DIR / "1US0.pdb",
|
||||
# common.DATA_DIR / "1US0-ligand.mol2",
|
||||
# "output.pqr",
|
||||
# id="1US0-ligand AMBER"
|
||||
# ),
|
||||
# ]
|
||||
# )
|
||||
# def test_ligand(args, input_pdb, input_mol2, output_pqr, tmp_path):
|
||||
# """Test ligand handling."""
|
||||
# args_ = "{args} --ligand={ligand}".format(args=args, ligand=input_mol2)
|
||||
# run_pdb2pqr(args_, input_pdb, output_pqr, tmp_path)
|
||||
# _LOGGER.warning("This test needs better checking to avoid silent failure.")
|
||||
Reference in New Issue
Block a user