ShowLigandWaters: Difference between revisions

From PyMOLWiki
Jump to navigation Jump to search
No edit summary
No edit summary
Line 2: Line 2:
|type      = script
|type      = script
|download  =  
|download  =  
|author    = [[User:PietroGattiLafranconi|Pietro Gatti-Lafranconi]]
|author    = [[User:GianlucaTomasello|Gianluca Tomasello]]
|license  = [http://creativecommons.org/licenses/by-nc-sa/3.0 CC BY-NC-SA]
|license  = [http://creativecommons.org/licenses/by-nc-sa/3.0 CC BY-NC-SA]#############
}}
}}


This is a test page##
This is a test page########


== Introduction ==
== Introduction ==
Given any two selections, this script calculates and returns the pairwise distances between all atoms that fall within a defined distance.
This script detects waters molecules within a specified distance from the ligand.
Water molecules are shown.
Distance between water molecules and O or N atoms of ligand are shown and is maked an output file containing a list of distance between waters and ligand atoms and the number of interactions


Can be used to measure distances within the same chain, between different chains or different objects.
Distances can be restricted to sidechain atoms only and the outputs either displayed on screen or printed on file.




== Usage ==
== Usage ==
pairwise_dist sel1, sel2, max_dist, [output=S/P/N, [sidechain=N/Y, [show=Y/N]]]
waters, [ligand name, distance]




== Required Arguments ==
== Required Arguments ==
* '''sel1''' = first selection
* '''ligand name''' = the ligand residue name
* '''sel2''' = second selection
* '''distance''' = max distance in Angstroms
* '''max_dist''' = max distance in Angstroms
 
 
== Optional Arguments ==
* '''output''' = accepts Screen/Print/None (default N)
* '''sidechain''' = limits (Y) results to sidechain atoms (default N)
* '''show''' = shows (Y) individual distances in pymol menu (default=N)




Line 51: Line 43:


[[File:pairwise1.png|450px|example #1]]
[[File:pairwise1.png|450px|example #1]]
'''example #2'''
<source lang="python">
PyMOL>pairwise_dist 2w8s and chain a, 2W8s and chain b, 3, sidechain=Y, output=S, show=Y
2W8S/A/GLN/432/OE1 to 2W8S/B/ARG/503/NH2: 2.758
2W8S/A/ASP/434/OD1 to 2W8S/B/SER/493/OG: 2.444
2W8S/A/TYR/447/OH to 2W8S/B/GLN/485/NE2: 2.878
2W8S/A/HIS/449/NE2 to 2W8S/B/SER/489/OG: 2.686
2W8S/A/GLN/485/OE1 to 2W8S/B/TYR/447/OH: 2.971
2W8S/A/SER/489/OG to 2W8S/B/HIS/449/NE2: 2.913
2W8S/A/SER/493/OG to 2W8S/B/ASP/434/OD1: 2.491
2W8S/A/ARG/503/NH2 to 2W8S/B/GLN/432/OE1: 2.653
Number of distances calculated: 8
</source>
[[File:pairwise2.png|450px|example #2]]
'''example #3'''
<source lang="python">
PyMOL>pairwise_dist 1FOS and chain H and resi 290:300, 1FOS and chain G, 4, sidechain=Y, show=Y, output=P
Results saved in IntAtoms_4.txt
Number of distances calculated: 24
</source>
[[File:pairwise3.png|450px|example #3]]





Revision as of 03:52, 2 September 2013

Type Python Script
Download
Author(s) Gianluca Tomasello
License CC BY-NC-SA#############

This is a test page########

Introduction

This script detects waters molecules within a specified distance from the ligand. Water molecules are shown. Distance between water molecules and O or N atoms of ligand are shown and is maked an output file containing a list of distance between waters and ligand atoms and the number of interactions


Usage

waters, [ligand name, distance]


Required Arguments

  • ligand name = the ligand residue name
  • distance = max distance in Angstroms


Examples

example #1

PyMOL>pairwise_dist 1efa and chain D, 1efa and chain B, 3, output=S, show=Y
 
1efa/D/DC/13/OP1 to 1efa/B/TYR/47/OH: 2.765
1efa/D/DC/13/OP2 to 1efa/B/LEU/6/N: 2.983
1efa/D/DC/13/OP2 to 1efa/B/LEU/6/CB: 2.928
1efa/D/DT/14/O4' to 1efa/B/ALA/57/CB: 2.827
1efa/D/DT/14/OP1 to 1efa/B/ASN/25/OD1: 2.858
1efa/D/DT/14/OP1 to 1efa/B/GLN/54/NE2: 2.996
1efa/D/DT/14/OP2 to 1efa/B/SER/21/OG: 2.517
1efa/D/DC/15/N4 to 1efa/B/GLN/18/NE2: 2.723
1efa/D/DA/16/N6 to 1efa/B/GLN/18/NE2: 2.931
 
Number of distances calculated: 9

example #1


The Code

Copy the following text and save it as pairwisedistances.py

from pymol import cmd, stored, math

def pairwise_dist(sel1, sel2, max_dist, output="N", sidechain="N", show="N"):
	"""
	usage: pairwise_dist sel1, sel2, max_dist, [output=S/P/N, [sidechain=N/Y, [show=Y/N]]]
	sel1 and sel2 can be any to pre-existing or newly defined selections
	max_dist: maximum distance in Angstrom between atoms in the two selections
	--optional settings:
	output: accepts Screen/Print/None (default N)
	sidechain: limits (Y) results to sidechain atoms (default N)
	show: shows (Y) individual distances in pymol menu (default=N)
	"""
	print ""
	cmd.delete ("dist*")
	extra=""
	if sidechain=="Y": extra=" and not name c+o+n"
	
	#builds models
	m1=cmd.get_model(sel2+" around "+str(max_dist)+" and "+sel1+extra)
	m1o=cmd.get_object_list(sel1)
	m2=cmd.get_model(sel1+" around "+str(max_dist)+" and "+sel2+extra)
	m2o=cmd.get_object_list(sel2)

	#defines selections
	cmd.select("__tsel1a", sel1+" around "+str(max_dist)+" and "+sel2+extra)
	cmd.select("__tsel1", "__tsel1a and "+sel2+extra)
	cmd.select("__tsel2a", sel2+" around "+str(max_dist)+" and "+sel1+extra)
	cmd.select("__tsel2", "__tsel2a and "+sel1+extra)
	cmd.select("IntAtoms_"+max_dist, "__tsel1 or __tsel2")
	cmd.select("IntRes_"+max_dist, "byres IntAtoms_"+max_dist)
 
	#controlers-1
	if len(m1o)==0: 
		print "warning, '"+sel1+extra+"' does not contain any atoms."
		return
	if len(m2o)==0: 
		print "warning, '"+sel2+extra+"' does not contain any atoms."
		return
	
	#measures distances
	s=""
	counter=0
	for c1 in range(len(m1.atom)):
		for c2 in range(len(m2.atom)):
			distance=math.sqrt(sum(map(lambda f: (f[0]-f[1])**2, zip(m1.atom[c1].coord,m2.atom[c2].coord))))
			if distance<float(max_dist):
				s+="%s/%s/%s/%s/%s to %s/%s/%s/%s/%s: %.3f\n" % (m1o[0],m1.atom[c1].chain,m1.atom[c1].resn,m1.atom[c1].resi,m1.atom[c1].name,m2o[0],m2.atom[c2].chain,m2.atom[c2].resn,m2.atom[c2].resi,m2.atom[c2].name, distance)
				counter+=1
				if show=="Y": cmd.distance (m1o[0]+" and "+m1.atom[c1].chain+"/"+m1.atom[c1].resi+"/"+m1.atom[c1].name, m2o[0]+" and "+m2.atom[c2].chain+"/"+m2.atom[c2].resi+"/"+m2.atom[c2].name)

	#controler-2
	if counter==0: 
		print "warning, no distances were measured! Check your selections/max_dist value"
		return
	
	#outputs
	if output=="S": print s
	if output=="P":
		f=open('IntAtoms_'+max_dist+'.txt','w')
		f.write("Number of distances calculated: %s\n" % (counter))
		f.write(s)
		f.close()
		print "Results saved in IntAtoms_%s.txt" % max_dist
	print "Number of distances calculated: %s" % (counter)
	cmd.hide("lines", "IntRes_*")
	if show=="Y": cmd.show("lines","IntRes_"+max_dist)
	cmd.deselect()
  
cmd.extend("pairwise_dist", pairwise_dist)