123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051 |
- 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, 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.coord_x = coordinates[0]
- self.coord_y = coordinates[1]
- self.coord_z = coordinates[2]
-
- 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
-
-
- 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
- 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)
|