Ejemplo n.º 1
0
    def test_process_part2(self):
        """
        check results of calls to removeNeighbors, filterBasedOnAngs,
        removeBadAts...
        """
        hb_builder = HydrogenBondBuilder()
        hb_builder.check_babel_types(self.mol.allAtoms)
        result = hb_builder.buildD(self.mol.allAtoms, hb_builder.paramDict)
        hAts = result['hAts']
        acceptorAts = result['acceptorAts']
        dist = hb_builder.paramDict['distCutoff']
        atDict = hb_builder.distSelector.select(hAts, acceptorAts, dist)
        self.assertEqual(len(atDict), 40)
        atDict = hb_builder.removeNeighbors(atDict)
        self.assertEqual(len(atDict), 30)

        donor2Ats = result['donor2Ats']
        donor3Ats = result['donor3Ats']
        acceptor2Ats = result['acceptor2Ats']
        acceptor3Ats = result['acceptor3Ats']
        badAtDict = hb_builder.filterBasedOnAngs(atDict, donor2Ats, donor3Ats,
                                                 acceptor2Ats, acceptor3Ats,
                                                 hb_builder.paramDict)
        self.assertEqual(len(badAtDict), 30)
        atDict = hb_builder.removeBadAts(atDict, badAtDict)
        self.assertEqual(len(atDict), 28)
Ejemplo n.º 2
0
 def __init__(self, receptor_file, percentCutoff=1., detect_pi=False, dist_cutoff=6, verbose=False, 
                     distanceSelector=None, hydrogen_bond_builder=None, distanceSelectorWithCutoff=None,
                     aromatic_cycle_bond_selector=None): 
     self.receptor_file = receptor_file
     receptor = Read(receptor_file)
     assert(len(receptor)==1)
     assert isinstance(receptor, MoleculeSet)
     self.macro = receptor[0]
     self.macro_atoms = self.macro.allAtoms
     self.macro.buildBondsByDistance()
     self.verbose = verbose
     #??useful??
     self.percentCutoff = percentCutoff
     self.detect_pi = detect_pi
     self.distanceSelector = distanceSelector 
     if self.distanceSelector is None:
         self.distanceSelector = CloserThanVDWSelector(return_dist=0)
     self.hydrogen_bond_builder = hydrogen_bond_builder 
     if self.hydrogen_bond_builder is None:
         self.hydrogen_bond_builder = HydrogenBondBuilder()
     self.distanceSelectorWithCutoff = distanceSelectorWithCutoff 
     if self.distanceSelectorWithCutoff is None:
         self.distanceSelectorWithCutoff = DistanceSelector()
     self.dist_cutoff=float(dist_cutoff)
     self.results = d = {}
     self.report_list =['lig_hb_atoms','lig_close_atoms']
     self.aromatic_cycle_bond_selector = aromatic_cycle_bond_selector
     if self.aromatic_cycle_bond_selector is None:
         self.aromatic_cycle_bond_selector = AromaticCycleBondSelector()
     if detect_pi:
         self.report_list.extend(['pi_cation','pi_pi', 'cation_pi', 't_shaped'])
     if self.verbose: print("self.report_list=", self.report_list)
Ejemplo n.º 3
0
 def test_buildD(self):
     """
     test buildD: donor3Ats, acceptor3Ats, acceptor2Ats, donor2Ats
     """
     hb_builder = HydrogenBondBuilder()
     hb_builder.check_babel_types(self.mol.allAtoms)
     result = hb_builder.buildD(self.mol.allAtoms, hb_builder.paramDict)
     #result_keys = ['donor3Ats', 'acceptor3Ats', 'acceptor2Ats', 'donor2Ats']
     result_keys = [
         'donor3Ats', 'acceptor3Ats', 'hAts', 'acceptorAts', 'acceptor2Ats',
         'donor2Ats'
     ]
     d = {}
     d['donor3Ats'] = [
         'N', 'OG1', 'OG1', 'SG', 'SG', 'OG', 'OG', 'SG', 'OG1', 'SG',
         'OG1', 'OH', 'OG1', 'SG', 'OG1', 'SG', 'OH'
     ]
     d['acceptor3Ats'] = [
         'OG1', 'OG1', 'SG', 'SG', 'OG', 'OG', 'SG', 'OG1', 'SG', 'OG1',
         'OH', 'OG1', 'SG', 'OG1', 'SG', 'OH'
     ]
     d['hAts'] = [
         'HN1', 'HN2', 'HN3', 'HG1', 'HN', 'HG1', 'HN', 'HN', 'HN', 'HG',
         'HN', 'HN', 'HN', 'HN', 'HE', 'HH11', 'HH12', 'HH21', 'HH22', 'HN',
         'HG', 'HN', 'HD21', 'HD22', 'HN', 'HN', 'HD21', 'HD22', 'HN', 'HN',
         'HN', 'HE', 'HH11', 'HH12', 'HH21', 'HH22', 'HN', 'HN', 'HN',
         'HG1', 'HN', 'HN', 'HN', 'HN', 'HN', 'HN', 'HG1', 'HN', 'HH', 'HN',
         'HG1', 'HN', 'HN', 'HN', 'HN', 'HN', 'HN', 'HN', 'HN', 'HG1', 'HN',
         'HN', 'HN', 'HN', 'HH', 'HN', 'HN', 'HD21', 'HD22'
     ]
     d['donor2Ats'] = [
         'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'NE', 'NH1', 'NH2', 'N',
         'N', 'ND2', 'N', 'N', 'ND2', 'N', 'N', 'N', 'NE', 'NH1', 'NH2',
         'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N',
         'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'N', 'ND2'
     ]
     d['acceptor2Ats'] = [
         'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'OD1',
         'O', 'O', 'OD1', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O',
         'OE1', 'OE2', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O',
         'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'OD1', 'OD2',
         'O', 'O', 'O', 'OD1', 'OXT'
     ]
     #acceptorAts = acceptor2Ats + acceptor3Ats
     d['acceptorAts'] = [
         'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'OD1',
         'O', 'O', 'OD1', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O',
         'OE1', 'OE2', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O',
         'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'O', 'OD1', 'OD2',
         'O', 'O', 'O', 'OD1', 'OXT', 'OG1', 'OG1', 'SG', 'SG', 'OG', 'OG',
         'SG', 'OG1', 'SG', 'OG1', 'OH', 'OG1', 'SG', 'OG1', 'SG', 'OH'
     ]
     for k in result_keys:
         #print 'testing ', k, ': '
         if result[k] is not None and len(result[k]):
             self.assertEqual(result[k].name, d[k])
         else:
             self.assertEqual(result[k], d[k])
Ejemplo n.º 4
0
 def test_process_part1(self):
     """
     check hAts and acceptorAts from buildD
     """
     hb_builder = HydrogenBondBuilder()
     hb_builder.check_babel_types(self.mol.allAtoms)
     result = hb_builder.buildD(self.mol.allAtoms, hb_builder.paramDict)
     hAts = result['hAts']
     self.assertEqual(len(hAts), 69)
     acceptorAts = result['acceptorAts']
     self.assertEqual(len(acceptorAts), 70)
Ejemplo n.º 5
0
def construct_hydrogen_bonds(receptor_atoms, ligand_atoms, verbose=False):
    atDict = HydrogenBondBuilder().build(receptor_atoms, ligand_atoms)
    num_hbonds = len(atDict)
    if verbose:
        print "found ", num_hbonds, " hydrogen bonds"
        for k, v in atDict.items():
            print k.full_name(), ' ', len(v), " hydrogen bond(s) to ",
            for a in atDict[k]:
                print a.full_name(), " ",
            print
    ostr = "%2d," % num_hbonds
    return ostr
Ejemplo n.º 6
0
 def test_buildHbonds(self):
     """
     check results of single call to build
     """
     hb_builder = HydrogenBondBuilder()
     hb_builder.build(self.mol)
     hbond_ats = self.mol.allAtoms.get(lambda x: hasattr(x, 'hbonds'))
     self.assertEquals(len(hbond_ats), 82)
     d = {}
     for a in self.mol.allAtoms:
         if hasattr(a, 'hbonds'):
             for b in a.hbonds:
                 d[b] = 1
     self.assertEquals(len(d.keys()), 28)
Ejemplo n.º 7
0
 def test_buildHbonds_babelTypes(self):
     """
     test assigning babel_types 
     """
     hb_builder = HydrogenBondBuilder()
     hb_builder.check_babel_types(self.mol.allAtoms)
     d = {}
     for a in self.mol.allAtoms:
         d[a.babel_type] = 1
     all_types = d.keys()
     all_types.sort()
     #print "all_types=", all_types
     #note: these are polar only hydrogens so no type 'HC'
     canned_list = [
         'C+', 'C2', 'C3', 'Cac', 'H', 'N3+', 'Nam', 'Ng+', 'O-', 'O2',
         'O3', 'S3'
     ]
     for k, v in zip(all_types, canned_list):
         self.assertEqual(k, v)
Ejemplo n.º 8
0
def construct_hydrogen_bonds(receptor_atoms, ligand_atoms):
    atDict = HydrogenBondBuilder().build(receptor_atoms, ligand_atoms)
    num_hbonds = len(atDict)
    ostr = "%2d," % num_hbonds
    return ostr
Ejemplo n.º 9
0
            ref = ref[0]
            coords = ref.allAtoms.coords
            refCoords = coords[:]
    d.clusterer.rmsTool = RMSDCalculator(coords)

    d.clusterer.make_clustering(rms_tolerance)

    # for building hydrogen bonds or reporting energy breakdown
    # setup receptor:
    if build_hydrogen_bonds or report_energy_breakdown:
        d.ligMol.buildBondsByDistance()
        receptor_filename = directory + '/' + receptor_filename
        receptor = Read(receptor_filename)[0]
        receptor.buildBondsByDistance()
    if build_hydrogen_bonds:
        hbondBuilder = HydrogenBondBuilder()
        #do next two lines for each conf
        #d.ligMol.set_conformation(conf)
        #atDict = hbondBuilder.build(receptor.allAtoms, d.ligMol.allAtoms)
        #num_hbonds= len(atDict)
    if report_energy_breakdown:
        ms = MolecularSystem()
        ms.add_entities(receptor.allAtoms)
        ms.add_entities(d.ligMol.allAtoms)
        ad305scorer = AutoDock305Scorer()
        ad305scorer.set_molecular_system(ms)
        #whenever the ligMol changes conf,
        #need to call ms.set_coords(1, new_coords)

    mode = 'w'
    first = True
Ejemplo n.º 10
0
 def test_constructor(self):
     """
     instantiate an HydrogenBuilder
     """
     hb_builder = HydrogenBondBuilder()
     self.assertEquals(hb_builder.__class__, HydrogenBondBuilder)
Ejemplo n.º 11
0
    def test_constructorOptions(self):
        """
         test possible constructor options
            options = distCutoff, distCutoff2, d2min, d2max,
                      d2min, d3max, a2min, a2max, a3min, a3max,
                      donorTypes, acceptorTypes, distOnly
        """
        val = 1.0
        hb_builder = HydrogenBondBuilder(distCutoff=val)
        self.assertEquals(hb_builder.__class__, HydrogenBondBuilder)
        self.assertEquals(hb_builder.paramDict['distCutoff'], val)
        hb_builder = HydrogenBondBuilder(distCutoff2=val)
        self.assertEquals(hb_builder.__class__, HydrogenBondBuilder)
        self.assertEquals(hb_builder.paramDict['distCutoff2'], val)

        val = 85
        hb_builder = HydrogenBondBuilder(d2max=val)
        self.assertEquals(hb_builder.__class__, HydrogenBondBuilder)
        self.assertEquals(hb_builder.paramDict['d2max'], val)
        hb_builder = HydrogenBondBuilder(d2min=val)
        self.assertEquals(hb_builder.__class__, HydrogenBondBuilder)
        self.assertEquals(hb_builder.paramDict['d2min'], val)
        hb_builder = HydrogenBondBuilder(a2min=val)
        self.assertEquals(hb_builder.__class__, HydrogenBondBuilder)
        self.assertEquals(hb_builder.paramDict['a2min'], val)
        hb_builder = HydrogenBondBuilder(a2max=val)
        self.assertEquals(hb_builder.__class__, HydrogenBondBuilder)
        self.assertEquals(hb_builder.paramDict['a2max'], val)

        hb_builder = HydrogenBondBuilder(d3min=val)
        self.assertEquals(hb_builder.__class__, HydrogenBondBuilder)
        self.assertEquals(hb_builder.paramDict['d3min'], val)
        hb_builder = HydrogenBondBuilder(d3max=val)
        self.assertEquals(hb_builder.__class__, HydrogenBondBuilder)
        self.assertEquals(hb_builder.paramDict['d3max'], val)
        hb_builder = HydrogenBondBuilder(a3min=val)
        self.assertEquals(hb_builder.__class__, HydrogenBondBuilder)
        self.assertEquals(hb_builder.paramDict['a3min'], val)
        hb_builder = HydrogenBondBuilder(a3max=val)
        self.assertEquals(hb_builder.__class__, HydrogenBondBuilder)
        self.assertEquals(hb_builder.paramDict['a3max'], val)

        val = ['Nam', 'Ng+']
        hb_builder = HydrogenBondBuilder(donorTypes=val)
        self.assertEquals(hb_builder.__class__, HydrogenBondBuilder)
        self.assertEquals(hb_builder.paramDict['donorTypes'], val)
        val = ['S3', '03']
        hb_builder = HydrogenBondBuilder(acceptorTypes=val)
        self.assertEquals(hb_builder.__class__, HydrogenBondBuilder)
        self.assertEquals(hb_builder.paramDict['acceptorTypes'], val)

        val = True
        hb_builder = HydrogenBondBuilder(distOnly=True)
        self.assertEquals(hb_builder.__class__, HydrogenBondBuilder)
        self.assertEquals(hb_builder.paramDict['distOnly'], val)
Ejemplo n.º 12
0
    if not directory:
        print('process_VSResults: directory must be specified.')
        usage()
        sys.exit()

    intF = None
    if len(custom_hb_parameters):
        if verbose: print("using custom hb parameters!")
        #custom_hb_parameters "distCutoff=3.00,distCutoff2=3.25"
        hb_list = custom_hb_parameters.split(',')
        kw = {}
        for item in hb_list:
            param, value = item.split('=')
            kw[param] = float(value)
            if verbose: print(param, '=', value)
        hbB = HydrogenBondBuilder(*(), **kw)
        intF = InteractionDetector(receptor_filename,
                                   detect_pi=detect_pi,
                                   hydrogen_bond_builder=hbB)

    drp = DockingResultProcessor(rms_tolerance=rms_tolerance,
                                 rms_reference=rms_reference,
                                 receptor_filename=receptor_filename,
                                 write_both=write_both,
                                 best_only=best_only,
                                 largestCl_only=largestCl_only,
                                 lc_stem=lc_stem,
                                 max_cl_to_write=max_cl_to_write,
                                 include_interactions=include_interactions,
                                 detect_pi=detect_pi,
                                 build_hbonds=build_hbonds,
Ejemplo n.º 13
0
def getHBAtoms(mol):
    """
    Function to identify donor and acceptor atoms for hydrogen bonds

    d2, d3, a2, a3 <- getHBAtoms(mol)

    The function will first build bonds then assign atom hybridization
    and bond orders. Next it will use a HydrogenBondBuilder to identify and'
    report donor and acceptor atoms in sets corresponding to Sp2 and Sp3
    hybridization.
    A .hbstatus is added to all atoms. The value can be:
      NE: NEutral
      D2: Sp2 donor 
      D3: Sp3 donor 
      A2: Sp2 acceptor
      A3: Sp3 acceptor
      B2: Sp2 acceptor and donor
      B3: Sp3 acceptor and donor
    """
    # add bonds
    mol.buildBondsByDistance()
    atoms = mol.allAtoms

    # assign .babel_type
    from PyBabel.atomTypes import AtomHybridization
    atyper = AtomHybridization()
    atyper.assignHybridization(atoms)

    # assign bond order
    from PyBabel.bo import BondOrder
    bond_orderer = BondOrder()
    bond_orderer.assignBondOrder(atoms, atoms.bonds[0])

    # get donors
    from MolKit.hydrogenBondBuilder import HydrogenBondBuilder
    hbbuilder = HydrogenBondBuilder()
    donorTypes = hbbuilder.paramDict['donorTypes']
    donorsp2Ats, donorsp3Ats = hbbuilder.getHBDonors(atoms, donorTypes)

    # get acceptors
    acceptorTypes = hbbuilder.paramDict['acceptorTypes']
    acceptorsp2Ats, acceptorsp3Ats = hbbuilder.getHBAcceptors(
        atoms, acceptorTypes)
    # create hbstatus attribute
    atoms.hbstatus = 'NE'
    for a in donorsp2Ats:
        a.hbstatus = 'D2'
    for a in donorsp3Ats:
        a.hbstatus = 'D3'
    for a in acceptorsp2Ats:
        a.hbstatus = 'A2'
    for a in acceptorsp3Ats:
        a.hbstatus = 'A3'

    # handle atoms that are both donors and acceptor
    for a in donorsp2Ats.inter(acceptorsp2Ats):
        a.hbstatus = 'B2'
    for a in donorsp3Ats.inter(acceptorsp3Ats):
        a.hbstatus = 'B3'

    return donorsp2Ats, donorsp3Ats, acceptorsp2Ats, acceptorsp3Ats