def setDeterminants(propka_residues, version=None, options=None): """ adding side-chain and coulomb determinants/perturbations to all residues - note, backbone determinants are set separately """ #debug.printResidues(propka_residues) iterative_interactions = [] # --- NonIterative section ---# for residue1 in propka_residues: for residue2 in propka_residues: if residue1 == residue2: break distance = calculate.InterResidueDistance(residue1, residue2) if distance < version.sidechain_cutoff or distance < version.coulomb_cutoff[1]: try: do_pair, iterative_interaction = version.interaction[residue1.resType][residue2.resType] except KeyError as e: do_pair = False if do_pair == True: if iterative_interaction == True: iterative.addtoDeterminantList(residue1, residue2, distance, iterative_interactions, version=version) #print "%s - %s I" % (residue1.label, residue2.label) else: addDeterminants(residue1, residue2, distance, version=version) #print "%s - %s" % (residue1.label, residue2.label) else: """ False - don't do this at home folks """ # --- Iterative section ---# #debug.printIterativeDeterminants(iterative_interactions) iterative.addDeterminants(iterative_interactions, version, options=options)
def setIonDeterminants(protein, version=None): """ adding ion determinants/perturbations """ ionizable_residues = lib.residueList("propka1") for residue in protein.propka_residues: if residue.resName in ionizable_residues: for ion in protein.residue_dictionary["ION"]: distance = calculate.InterResidueDistance(residue, ion) if distance < version.coulomb_cutoff[1]: label = "%s%4d%2s" % (ion.resName, ion.resNumb, ion.chainID) weight = version.calculatePairWeight(residue.Nmass, ion.Nmass) # the pKa of both acids and bases are shifted up by negative ions (and vice versa) value = (-ion.Q) * version.calculateCoulombEnergy(distance, weight) newDeterminant = Determinant(label, value) residue.determinants[2].append(newDeterminant)