55 lines
1.9 KiB
Python
55 lines
1.9 KiB
Python
import math
|
|
class Atom:
|
|
|
|
def dist_atoms(self, atom2):
|
|
return(math.sqrt((self.coord_x-atom2.coord_x)**2 +
|
|
(self.coord_y-atom2.coord_y)**2 +
|
|
(self.coord_z-atom2.coord_z)**2))
|
|
|
|
|
|
def __init__(self, atom_id, atom_name, res_name, chain_id,
|
|
res_seq_nb, insertion_code, coordinates):
|
|
self.atom_id = atom_id
|
|
self.atom_name = atom_name
|
|
self.res_name = res_name
|
|
self.chain_id = chain_id
|
|
self.res_seq_nb = res_seq_nb
|
|
self.insertion_code = insertion_code
|
|
self.coord_x = coordinates[0]
|
|
self.coord_y = coordinates[1]
|
|
self.coord_z = coordinates[2]
|
|
self.coords = coordinates
|
|
|
|
class Residue:
|
|
def __init__(self, atoms_list):
|
|
self.atoms = {}
|
|
for atom in atoms_list:
|
|
self.atoms[atom.atom_name] = atom
|
|
self.resid = atom.res_seq_nb
|
|
self.res_name = atom.res_name
|
|
self.chain_id = atom.chain_id
|
|
self.insertion_code = atom.insertion_code
|
|
|
|
|
|
def h_bond(self, res2):
|
|
if("H" not in res2.atoms.keys()):
|
|
return(False)
|
|
# elementary charge in Coulomb
|
|
#e = 1.602176634 * 10*math.exp(-19)
|
|
# dimensionnal factor f
|
|
f = 332
|
|
# partial charges
|
|
q1 = 0.42
|
|
q2 = 0.20
|
|
# r, distance between O-N atoms, in angströms
|
|
r_ON = self.atoms["O"].dist_atoms(res2.atoms["N"])
|
|
# r, distance between C-H atoms, in angströms
|
|
r_CH = self.atoms["C"].dist_atoms(res2.atoms["H"])
|
|
# r, distance between O-H atoms, in angströms
|
|
r_OH = self.atoms["O"].dist_atoms(res2.atoms["H"])
|
|
# r, distance between C-N atoms, in angströms
|
|
r_CN = self.atoms["C"].dist_atoms(res2.atoms["N"])
|
|
# Electrostatic interaction energy, in kcal/mole
|
|
E = q1*q2*(1/r_ON + 1/r_CH - 1/r_OH - 1/r_CN)*f
|
|
return(E)
|