<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>https://wiki.pymol.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=PietroGattiLafranconi</id>
	<title>PyMOL Wiki - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="https://wiki.pymol.org/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=PietroGattiLafranconi"/>
	<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php/Special:Contributions/PietroGattiLafranconi"/>
	<updated>2026-05-25T08:37:51Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.35.1</generator>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=Load_new_B-factors&amp;diff=12170</id>
		<title>Load new B-factors</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=Load_new_B-factors&amp;diff=12170"/>
		<updated>2014-09-22T15:43:54Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: download link added&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox script-repo&lt;br /&gt;
|type      = script&lt;br /&gt;
|download  = [http://dx.doi.org/10.6084/m9.figshare.1176991 figshare]&lt;br /&gt;
|author    = [[User:PietroGattiLafranconi|Pietro Gatti-Lafranconi]]&lt;br /&gt;
|license   = [http://creativecommons.org/licenses/by/4.0/ CC BY 4.0]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Quick and simple script to replace B-factor values in a PDB structure.&lt;br /&gt;
&lt;br /&gt;
New B-factors are provided in an external .txt file, one per line.&lt;br /&gt;
&lt;br /&gt;
By default, the script will also redraw the selected molecule as cartoon putty and colour by B-factor&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
 loadBfacts mol, [startaa, [source, [visual Y/N]]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Required Arguments ==&lt;br /&gt;
* '''mol ''' = any object selection (within one single object though)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Optional Arguments ==&lt;br /&gt;
* '''startaa''' = number of amino acid the first value in 'source' refers to (default=1)&lt;br /&gt;
* '''source''' = name of the file containing new B-factor values (default=newBfactors.txt)&lt;br /&gt;
* '''visual''' = redraws structure as cartoon_putty and displays bar with min/max values (default=Y)&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
For its very nature, this script is not suitable for complex cases in which only some B-factors are to be replaced, or on complex selections. In such cases, [http://pldserver1.biochem.queensu.ca/~rlc/work/pymol/ data2bfactor.py] is a better choice.&lt;br /&gt;
&lt;br /&gt;
B-factors have to be entered one per line, with no labels or amino acid ID. They will replace values of a continuous stretch of amino acids of equal length (or shorter) starting from the position provided with 'startaa'.&lt;br /&gt;
&lt;br /&gt;
'newBfactors.txt' looks like&lt;br /&gt;
 2&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 3&lt;br /&gt;
 7&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;loadbfacts 1LVM&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[File:LoadBfacts1.png|450px|example #1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;loadbfacts 1LVM and chain a, startaa=135&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[File:LoadBfacts02.png|450px|example #2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Code ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from pymol import cmd, stored, math&lt;br /&gt;
	&lt;br /&gt;
def loadBfacts (mol,startaa=1,source=&amp;quot;newBfactors.txt&amp;quot;, visual=&amp;quot;Y&amp;quot;):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	Replaces B-factors with a list of values contained in a plain txt file&lt;br /&gt;
	&lt;br /&gt;
	usage: loadBfacts mol, [startaa, [source, [visual]]]&lt;br /&gt;
 &lt;br /&gt;
	mol = any object selection (within one single object though)&lt;br /&gt;
	startaa = number of first amino acid in 'new B-factors' file (default=1)&lt;br /&gt;
	source = name of the file containing new B-factor values (default=newBfactors.txt)&lt;br /&gt;
	visual = redraws structure as cartoon_putty and displays bar with min/max values (default=Y)&lt;br /&gt;
 &lt;br /&gt;
	example: loadBfacts 1LVM and chain A&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	obj=cmd.get_object_list(mol)[0]&lt;br /&gt;
	cmd.alter(mol,&amp;quot;b=-1.0&amp;quot;)&lt;br /&gt;
	inFile = open(source, 'r')&lt;br /&gt;
	counter=int(startaa)&lt;br /&gt;
	bfacts=[]&lt;br /&gt;
	for line in inFile.readlines():	&lt;br /&gt;
		bfact=float(line)&lt;br /&gt;
		bfacts.append(bfact)&lt;br /&gt;
		cmd.alter(&amp;quot;%s and resi %s and n. CA&amp;quot;%(mol,counter), &amp;quot;b=%s&amp;quot;%bfact)&lt;br /&gt;
		counter=counter+1&lt;br /&gt;
	if visual==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		cmd.show_as(&amp;quot;cartoon&amp;quot;,mol)&lt;br /&gt;
		cmd.cartoon(&amp;quot;putty&amp;quot;, mol)&lt;br /&gt;
		cmd.set(&amp;quot;cartoon_putty_scale_min&amp;quot;, min(bfacts),obj)&lt;br /&gt;
		cmd.set(&amp;quot;cartoon_putty_scale_max&amp;quot;, max(bfacts),obj)&lt;br /&gt;
		cmd.set(&amp;quot;cartoon_putty_transform&amp;quot;, 0,obj)&lt;br /&gt;
		cmd.set(&amp;quot;cartoon_putty_radius&amp;quot;, 0.2,obj)&lt;br /&gt;
		cmd.spectrum(&amp;quot;b&amp;quot;,&amp;quot;rainbow&amp;quot;, &amp;quot;%s and n. CA &amp;quot; %mol)&lt;br /&gt;
		cmd.ramp_new(&amp;quot;count&amp;quot;, obj, [min(bfacts), max(bfacts)], &amp;quot;rainbow&amp;quot;)&lt;br /&gt;
		cmd.recolor()&lt;br /&gt;
&lt;br /&gt;
cmd.extend(&amp;quot;loadBfacts&amp;quot;, loadBfacts);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Script_Library]]&lt;br /&gt;
[[Category:Biochemical_Scripts]]&lt;br /&gt;
[[Category:Coloring]]&lt;br /&gt;
[[Category:Structural_Biology_Scripts]]&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=Load_new_B-factors&amp;diff=12169</id>
		<title>Load new B-factors</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=Load_new_B-factors&amp;diff=12169"/>
		<updated>2014-09-22T15:38:19Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: Page created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox script-repo&lt;br /&gt;
|type      = script&lt;br /&gt;
|download  = TBC&lt;br /&gt;
|author    = [[User:PietroGattiLafranconi|Pietro Gatti-Lafranconi]]&lt;br /&gt;
|license   = [http://creativecommons.org/licenses/by/4.0/ CC BY 4.0]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Quick and simple script to replace B-factor values in a PDB structure.&lt;br /&gt;
&lt;br /&gt;
New B-factors are provided in an external .txt file, one per line.&lt;br /&gt;
&lt;br /&gt;
By default, the script will also redraw the selected molecule as cartoon putty and colour by B-factor&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
 loadBfacts mol, [startaa, [source, [visual Y/N]]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Required Arguments ==&lt;br /&gt;
* '''mol ''' = any object selection (within one single object though)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Optional Arguments ==&lt;br /&gt;
* '''startaa''' = number of amino acid the first value in 'source' refers to (default=1)&lt;br /&gt;
* '''source''' = name of the file containing new B-factor values (default=newBfactors.txt)&lt;br /&gt;
* '''visual''' = redraws structure as cartoon_putty and displays bar with min/max values (default=Y)&lt;br /&gt;
&lt;br /&gt;
== Limitations ==&lt;br /&gt;
For its very nature, this script is not suitable for complex cases in which only some B-factors are to be replaced, or on complex selections. In such cases, [http://pldserver1.biochem.queensu.ca/~rlc/work/pymol/ data2bfactor.py] is a better choice.&lt;br /&gt;
&lt;br /&gt;
B-factors have to be entered one per line, with no labels or amino acid ID. They will replace values of a continuous stretch of amino acids of equal length (or shorter) starting from the position provided with 'startaa'.&lt;br /&gt;
&lt;br /&gt;
'newBfactors.txt' looks like&lt;br /&gt;
 2&lt;br /&gt;
 0&lt;br /&gt;
 0&lt;br /&gt;
 3&lt;br /&gt;
 7&lt;br /&gt;
 ...&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;loadbfacts 1LVM&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[File:LoadBfacts1.png|450px|example #1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;loadbfacts 1LVM and chain a, startaa=135&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[File:LoadBfacts02.png|450px|example #2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Code ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from pymol import cmd, stored, math&lt;br /&gt;
	&lt;br /&gt;
def loadBfacts (mol,startaa=1,source=&amp;quot;newBfactors.txt&amp;quot;, visual=&amp;quot;Y&amp;quot;):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	Replaces B-factors with a list of values contained in a plain txt file&lt;br /&gt;
	&lt;br /&gt;
	usage: loadBfacts mol, [startaa, [source, [visual]]]&lt;br /&gt;
 &lt;br /&gt;
	mol = any object selection (within one single object though)&lt;br /&gt;
	startaa = number of first amino acid in 'new B-factors' file (default=1)&lt;br /&gt;
	source = name of the file containing new B-factor values (default=newBfactors.txt)&lt;br /&gt;
	visual = redraws structure as cartoon_putty and displays bar with min/max values (default=Y)&lt;br /&gt;
 &lt;br /&gt;
	example: loadBfacts 1LVM and chain A&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	obj=cmd.get_object_list(mol)[0]&lt;br /&gt;
	cmd.alter(mol,&amp;quot;b=-1.0&amp;quot;)&lt;br /&gt;
	inFile = open(source, 'r')&lt;br /&gt;
	counter=int(startaa)&lt;br /&gt;
	bfacts=[]&lt;br /&gt;
	for line in inFile.readlines():	&lt;br /&gt;
		bfact=float(line)&lt;br /&gt;
		bfacts.append(bfact)&lt;br /&gt;
		cmd.alter(&amp;quot;%s and resi %s and n. CA&amp;quot;%(mol,counter), &amp;quot;b=%s&amp;quot;%bfact)&lt;br /&gt;
		counter=counter+1&lt;br /&gt;
	if visual==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		cmd.show_as(&amp;quot;cartoon&amp;quot;,mol)&lt;br /&gt;
		cmd.cartoon(&amp;quot;putty&amp;quot;, mol)&lt;br /&gt;
		cmd.set(&amp;quot;cartoon_putty_scale_min&amp;quot;, min(bfacts),obj)&lt;br /&gt;
		cmd.set(&amp;quot;cartoon_putty_scale_max&amp;quot;, max(bfacts),obj)&lt;br /&gt;
		cmd.set(&amp;quot;cartoon_putty_transform&amp;quot;, 0,obj)&lt;br /&gt;
		cmd.set(&amp;quot;cartoon_putty_radius&amp;quot;, 0.2,obj)&lt;br /&gt;
		cmd.spectrum(&amp;quot;b&amp;quot;,&amp;quot;rainbow&amp;quot;, &amp;quot;%s and n. CA &amp;quot; %mol)&lt;br /&gt;
		cmd.ramp_new(&amp;quot;count&amp;quot;, obj, [min(bfacts), max(bfacts)], &amp;quot;rainbow&amp;quot;)&lt;br /&gt;
		cmd.recolor()&lt;br /&gt;
&lt;br /&gt;
cmd.extend(&amp;quot;loadBfacts&amp;quot;, loadBfacts);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Script_Library]]&lt;br /&gt;
[[Category:Biochemical_Scripts]]&lt;br /&gt;
[[Category:Coloring]]&lt;br /&gt;
[[Category:Structural_Biology_Scripts]]&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=ListSelection2&amp;diff=11927</id>
		<title>ListSelection2</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=ListSelection2&amp;diff=11927"/>
		<updated>2014-05-22T16:59:19Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: download link and license update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox script-repo&lt;br /&gt;
|type      = script&lt;br /&gt;
|download  = [http://dx.doi.org/10.6084/m9.figshare.1031599 figshare]&lt;br /&gt;
|author    = [[User:PietroGattiLafranconi|Pietro Gatti-Lafranconi]]&lt;br /&gt;
|license   = [http://creativecommons.org/licenses/by/4.0/ CC BY 4.0]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
Alternative script to [[List_Selection]] that will:&lt;br /&gt;
* list multiple residues once&lt;br /&gt;
* include water and hetatoms&lt;br /&gt;
* account for different chains/objects&lt;br /&gt;
* produce a screen/printed output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
listselection selection, [output=N/S/P, [HOH=Y/N ]]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
where:&lt;br /&gt;
* '''selection''' can be any existing or newly-defined selection&lt;br /&gt;
* '''output''' controls if the list is hidden (default), printed on screen (S) or saved in a file (P)&lt;br /&gt;
* '''HOH''' (default Y) allows to exclude (N) water residues from the list&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;listselection 1efa, output=P&lt;br /&gt;
Residues in '1efa': 1043&lt;br /&gt;
Results saved in listselection_1efa.txt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;listselection sele, output=S, HOH=N&lt;br /&gt;
Residues in 'sele, without HOH': 7&lt;br /&gt;
1LBH/A/ARG/86&lt;br /&gt;
1LBH/A/ALA/87&lt;br /&gt;
1LBH/A/ASP/88&lt;br /&gt;
1LBH/A/GLN/89&lt;br /&gt;
1LBH/A/LEU/90&lt;br /&gt;
1LBH/A/GLY/91&lt;br /&gt;
1LBH/A/ALA/92&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;listselection 1efa and resn LEU, output=S&lt;br /&gt;
Residues in '1efa and resn LEU': 108&lt;br /&gt;
1efa/A/LEU/6&lt;br /&gt;
1efa/A/LEU/45&lt;br /&gt;
1efa/A/LEU/56&lt;br /&gt;
[...]&lt;br /&gt;
1efa/C/LEU/323&lt;br /&gt;
1efa/C/LEU/330&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Code =&lt;br /&gt;
Copy the following text and save it as listselection.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from pymol import cmd, stored&lt;br /&gt;
 &lt;br /&gt;
def listselection (selection, output=&amp;quot;N&amp;quot;, HOH=&amp;quot;Y&amp;quot;):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;	&lt;br /&gt;
	usage: listselection selection, [output=N/S/P, [HOH=Y/N ]]&lt;br /&gt;
	&lt;br /&gt;
	More information at: PymolWiki: http://http://pymolwiki.org/index.php/ListSelection2&lt;br /&gt;
	AUTHOR: Pietro Gatti-Lafranconi, 2013&lt;br /&gt;
	Please inform me if you use/improve/like/dislike/publish with this script.&lt;br /&gt;
	CC BY-NC-SA&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	printedselection=&amp;quot;&amp;quot;&lt;br /&gt;
	extra=&amp;quot;&amp;quot;&lt;br /&gt;
	counter=0&lt;br /&gt;
	sel=selection&lt;br /&gt;
	objs=cmd.get_object_list(sel)&lt;br /&gt;
&lt;br /&gt;
	if HOH==&amp;quot;N&amp;quot;:&lt;br /&gt;
		sel=selection+&amp;quot; and not resn HOH&amp;quot;&lt;br /&gt;
		extra=&amp;quot;, without HOH&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	for a in range(len(objs)):&lt;br /&gt;
		m1=cmd.get_model(sel+&amp;quot; and &amp;quot;+objs[a])&lt;br /&gt;
		for x in range(len(m1.atom)):&lt;br /&gt;
			if m1.atom[x-1].resi!=m1.atom[x].resi:&lt;br /&gt;
				printedselection+=&amp;quot;%s/%s/%s/%s\n&amp;quot; % (objs[a], m1.atom[x].chain, m1.atom[x].resn, m1.atom[x].resi)&lt;br /&gt;
				counter+=1&lt;br /&gt;
				&lt;br /&gt;
	print &amp;quot;Residues in '%s%s': %s&amp;quot; % (selection, extra, counter)&lt;br /&gt;
	if output==&amp;quot;S&amp;quot;: print printedselection&lt;br /&gt;
	if output==&amp;quot;P&amp;quot;:&lt;br /&gt;
		f=open('listselection_'+selection+'.txt','w')&lt;br /&gt;
		f.write(&amp;quot;Residues in '%s%s': %s\n&amp;quot; % (selection, extra, counter))&lt;br /&gt;
		f.write(printedselection)&lt;br /&gt;
		f.close()&lt;br /&gt;
		print &amp;quot;Results saved in listselection_%s.txt&amp;quot; % selection&lt;br /&gt;
		&lt;br /&gt;
cmd.extend('listselection',listselection)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Script_Library]]&lt;br /&gt;
[[Category:ObjSel_Scripts]]&lt;br /&gt;
[[Category:Biochemical_Scripts]]&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=Pairwise_distances&amp;diff=11930</id>
		<title>Pairwise distances</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=Pairwise_distances&amp;diff=11930"/>
		<updated>2014-05-22T16:59:03Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: download link and license update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox script-repo&lt;br /&gt;
|type      = script&lt;br /&gt;
|download  = [http://dx.doi.org/10.6084/m9.figshare.1031600 figshare]&lt;br /&gt;
|author    = [[User:PietroGattiLafranconi|Pietro Gatti-Lafranconi]]&lt;br /&gt;
|license   = [http://creativecommons.org/licenses/by/4.0/ CC BY 4.0]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Given any two selections, this script calculates and returns the pairwise distances between all atoms that fall within a defined distance.&lt;br /&gt;
&lt;br /&gt;
Can be used to measure distances within the same chain, between different chains or different objects.&lt;br /&gt;
&lt;br /&gt;
Distances can be restricted to sidechain atoms only and the outputs either displayed on screen or printed on file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
 pairwise_dist sel1, sel2, max_dist, [output=S/P/N, [sidechain=N/Y, [show=Y/N]]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Required Arguments ==&lt;br /&gt;
* '''sel1''' = first selection&lt;br /&gt;
* '''sel2''' = second selection&lt;br /&gt;
* '''max_dist''' = max distance in Angstroms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Optional Arguments ==&lt;br /&gt;
* '''output''' = accepts Screen/Print/None (default N)&lt;br /&gt;
* '''sidechain''' = limits (Y) results to sidechain atoms (default N)&lt;br /&gt;
* '''show''' = shows (Y) individual distances in pymol menu (default=N)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
'''example #1'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;pairwise_dist 1efa and chain D, 1efa and chain B, 3, output=S, show=Y&lt;br /&gt;
 &lt;br /&gt;
1efa/D/DC/13/OP1 to 1efa/B/TYR/47/OH: 2.765&lt;br /&gt;
1efa/D/DC/13/OP2 to 1efa/B/LEU/6/N: 2.983&lt;br /&gt;
1efa/D/DC/13/OP2 to 1efa/B/LEU/6/CB: 2.928&lt;br /&gt;
1efa/D/DT/14/O4' to 1efa/B/ALA/57/CB: 2.827&lt;br /&gt;
1efa/D/DT/14/OP1 to 1efa/B/ASN/25/OD1: 2.858&lt;br /&gt;
1efa/D/DT/14/OP1 to 1efa/B/GLN/54/NE2: 2.996&lt;br /&gt;
1efa/D/DT/14/OP2 to 1efa/B/SER/21/OG: 2.517&lt;br /&gt;
1efa/D/DC/15/N4 to 1efa/B/GLN/18/NE2: 2.723&lt;br /&gt;
1efa/D/DA/16/N6 to 1efa/B/GLN/18/NE2: 2.931&lt;br /&gt;
 &lt;br /&gt;
Number of distances calculated: 9&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:pairwise1.png|450px|example #1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''example #2'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;pairwise_dist 2w8s and chain a, 2W8s and chain b, 3, sidechain=Y, output=S, show=Y&lt;br /&gt;
 &lt;br /&gt;
2W8S/A/GLN/432/OE1 to 2W8S/B/ARG/503/NH2: 2.758&lt;br /&gt;
2W8S/A/ASP/434/OD1 to 2W8S/B/SER/493/OG: 2.444&lt;br /&gt;
2W8S/A/TYR/447/OH to 2W8S/B/GLN/485/NE2: 2.878&lt;br /&gt;
2W8S/A/HIS/449/NE2 to 2W8S/B/SER/489/OG: 2.686&lt;br /&gt;
2W8S/A/GLN/485/OE1 to 2W8S/B/TYR/447/OH: 2.971&lt;br /&gt;
2W8S/A/SER/489/OG to 2W8S/B/HIS/449/NE2: 2.913&lt;br /&gt;
2W8S/A/SER/493/OG to 2W8S/B/ASP/434/OD1: 2.491&lt;br /&gt;
2W8S/A/ARG/503/NH2 to 2W8S/B/GLN/432/OE1: 2.653&lt;br /&gt;
 &lt;br /&gt;
Number of distances calculated: 8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:pairwise2.png|450px|example #2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''example #3'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;pairwise_dist 1FOS and chain H and resi 290:300, 1FOS and chain G, 4, sidechain=Y, show=Y, output=P&lt;br /&gt;
 &lt;br /&gt;
Results saved in IntAtoms_4.txt&lt;br /&gt;
Number of distances calculated: 24&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:pairwise3.png|450px|example #3]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Code ==&lt;br /&gt;
&lt;br /&gt;
Copy the following text and save it as pairwisedistances.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from pymol import cmd, stored, math&lt;br /&gt;
&lt;br /&gt;
def pairwise_dist(sel1, sel2, max_dist, output=&amp;quot;N&amp;quot;, sidechain=&amp;quot;N&amp;quot;, show=&amp;quot;N&amp;quot;):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	usage: pairwise_dist sel1, sel2, max_dist, [output=S/P/N, [sidechain=N/Y, [show=Y/N]]]&lt;br /&gt;
	sel1 and sel2 can be any to pre-existing or newly defined selections&lt;br /&gt;
	max_dist: maximum distance in Angstrom between atoms in the two selections&lt;br /&gt;
	--optional settings:&lt;br /&gt;
	output: accepts Screen/Print/None (default N)&lt;br /&gt;
	sidechain: limits (Y) results to sidechain atoms (default N)&lt;br /&gt;
	show: shows (Y) individual distances in pymol menu (default=N)&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	print &amp;quot;&amp;quot;&lt;br /&gt;
	cmd.delete (&amp;quot;dist*&amp;quot;)&lt;br /&gt;
	extra=&amp;quot;&amp;quot;&lt;br /&gt;
	if sidechain==&amp;quot;Y&amp;quot;: extra=&amp;quot; and not name c+o+n&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	#builds models&lt;br /&gt;
	m1=cmd.get_model(sel2+&amp;quot; around &amp;quot;+str(max_dist)+&amp;quot; and &amp;quot;+sel1+extra)&lt;br /&gt;
	m1o=cmd.get_object_list(sel1)&lt;br /&gt;
	m2=cmd.get_model(sel1+&amp;quot; around &amp;quot;+str(max_dist)+&amp;quot; and &amp;quot;+sel2+extra)&lt;br /&gt;
	m2o=cmd.get_object_list(sel2)&lt;br /&gt;
&lt;br /&gt;
	#defines selections&lt;br /&gt;
	cmd.select(&amp;quot;__tsel1a&amp;quot;, sel1+&amp;quot; around &amp;quot;+str(max_dist)+&amp;quot; and &amp;quot;+sel2+extra)&lt;br /&gt;
	cmd.select(&amp;quot;__tsel1&amp;quot;, &amp;quot;__tsel1a and &amp;quot;+sel2+extra)&lt;br /&gt;
	cmd.select(&amp;quot;__tsel2a&amp;quot;, sel2+&amp;quot; around &amp;quot;+str(max_dist)+&amp;quot; and &amp;quot;+sel1+extra)&lt;br /&gt;
	cmd.select(&amp;quot;__tsel2&amp;quot;, &amp;quot;__tsel2a and &amp;quot;+sel1+extra)&lt;br /&gt;
	cmd.select(&amp;quot;IntAtoms_&amp;quot;+max_dist, &amp;quot;__tsel1 or __tsel2&amp;quot;)&lt;br /&gt;
	cmd.select(&amp;quot;IntRes_&amp;quot;+max_dist, &amp;quot;byres IntAtoms_&amp;quot;+max_dist)&lt;br /&gt;
 &lt;br /&gt;
	#controlers-1&lt;br /&gt;
	if len(m1o)==0: &lt;br /&gt;
		print &amp;quot;warning, '&amp;quot;+sel1+extra+&amp;quot;' does not contain any atoms.&amp;quot;&lt;br /&gt;
		return&lt;br /&gt;
	if len(m2o)==0: &lt;br /&gt;
		print &amp;quot;warning, '&amp;quot;+sel2+extra+&amp;quot;' does not contain any atoms.&amp;quot;&lt;br /&gt;
		return&lt;br /&gt;
	&lt;br /&gt;
	#measures distances&lt;br /&gt;
	s=&amp;quot;&amp;quot;&lt;br /&gt;
	counter=0&lt;br /&gt;
	for c1 in range(len(m1.atom)):&lt;br /&gt;
		for c2 in range(len(m2.atom)):&lt;br /&gt;
			distance=math.sqrt(sum(map(lambda f: (f[0]-f[1])**2, zip(m1.atom[c1].coord,m2.atom[c2].coord))))&lt;br /&gt;
			if distance&amp;lt;float(max_dist):&lt;br /&gt;
				s+=&amp;quot;%s/%s/%s/%s/%s to %s/%s/%s/%s/%s: %.3f\n&amp;quot; % (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)&lt;br /&gt;
				counter+=1&lt;br /&gt;
				if show==&amp;quot;Y&amp;quot;: cmd.distance (m1o[0]+&amp;quot; and &amp;quot;+m1.atom[c1].chain+&amp;quot;/&amp;quot;+m1.atom[c1].resi+&amp;quot;/&amp;quot;+m1.atom[c1].name, m2o[0]+&amp;quot; and &amp;quot;+m2.atom[c2].chain+&amp;quot;/&amp;quot;+m2.atom[c2].resi+&amp;quot;/&amp;quot;+m2.atom[c2].name)&lt;br /&gt;
&lt;br /&gt;
	#controler-2&lt;br /&gt;
	if counter==0: &lt;br /&gt;
		print &amp;quot;warning, no distances were measured! Check your selections/max_dist value&amp;quot;&lt;br /&gt;
		return&lt;br /&gt;
	&lt;br /&gt;
	#outputs&lt;br /&gt;
	if output==&amp;quot;S&amp;quot;: print s&lt;br /&gt;
	if output==&amp;quot;P&amp;quot;:&lt;br /&gt;
		f=open('IntAtoms_'+max_dist+'.txt','w')&lt;br /&gt;
		f.write(&amp;quot;Number of distances calculated: %s\n&amp;quot; % (counter))&lt;br /&gt;
		f.write(s)&lt;br /&gt;
		f.close()&lt;br /&gt;
		print &amp;quot;Results saved in IntAtoms_%s.txt&amp;quot; % max_dist&lt;br /&gt;
	print &amp;quot;Number of distances calculated: %s&amp;quot; % (counter)&lt;br /&gt;
	cmd.hide(&amp;quot;lines&amp;quot;, &amp;quot;IntRes_*&amp;quot;)&lt;br /&gt;
	if show==&amp;quot;Y&amp;quot;: cmd.show(&amp;quot;lines&amp;quot;,&amp;quot;IntRes_&amp;quot;+max_dist)&lt;br /&gt;
	cmd.deselect()&lt;br /&gt;
  &lt;br /&gt;
cmd.extend(&amp;quot;pairwise_dist&amp;quot;, pairwise_dist)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Script_Library]]&lt;br /&gt;
[[Category:ObjSel_Scripts]]&lt;br /&gt;
[[Category:Biochemical_Scripts]]&lt;br /&gt;
[[Category:Structural_Biology_Scripts]]&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=DistancesRH&amp;diff=11923</id>
		<title>DistancesRH</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=DistancesRH&amp;diff=11923"/>
		<updated>2014-05-22T16:56:10Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: download link and license update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox script-repo&lt;br /&gt;
|type      = script&lt;br /&gt;
|download  = [http://dx.doi.org/10.6084/m9.figshare.1031580 figshare]&lt;br /&gt;
|author    = [[User:PietroGattiLafranconi|Pietro Gatti-Lafranconi]]&lt;br /&gt;
|license   = [http://creativecommons.org/licenses/by/4.0/ CC BY 4.0]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Given an object, a reference amino acid and a radius, this scripts calculates pairwise distances between atom(s) in the reference and all atoms that fall within the given range.&lt;br /&gt;
&lt;br /&gt;
The script is intended to provide a range of useful tools while requiring minimal coding skills (i.e. it is not optimised for efficiency).&lt;br /&gt;
&lt;br /&gt;
By changing input parameters it is possible to:&lt;br /&gt;
* choose the output (none, on screen, on file)&lt;br /&gt;
* measure distances from one single atom&lt;br /&gt;
* display distance objects in pymol&lt;br /&gt;
* restrict distances between hydrogen-bond forming atoms only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The script also runs a number of controls to verify that inputs and outputs exists/are suitable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
 distancesRH obj, ref, dist, [chain, [output S/P/N, [show Y/N, [Hbonds Y/N, [aname]]]]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Required Arguments ==&lt;br /&gt;
* '''obj''' = object name&lt;br /&gt;
* '''ref''' = reference amino acid id&lt;br /&gt;
* '''dist''' = radius in Angstroms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Optional Arguments ==&lt;br /&gt;
* ''chain'' = selected chain&lt;br /&gt;
* ''output'' = accepts S (screen), P (print) or N (none), default=S&lt;br /&gt;
* ''show'' = shows distances in pymol window, default=N&lt;br /&gt;
* ''Hbonds'' = restricts results to atoms that can form Hbonds, default=N&lt;br /&gt;
* ''aname'' = selects a specific atom in reference object and to calculate distances from one individual atom&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
'''example #1'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
distancesRH 2WHH, 25, 3.2, show=Y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Will show distances between all atoms of residue 25 in 2WHH and any atom within 3.2 Å and return the result on screen (figure 1, left).&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
distancesRH 2WHH, 25, 3.2, show=Y, aname=OD1, output=P&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Same result as before, but only distances from atom OD1 are measured and shown. Results will be printed in 'distancesRH_25-OD1.txt' (figure 1, right).&lt;br /&gt;
&lt;br /&gt;
[[File:distancesRH_ex1.png|450px|example #1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''example #2'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
distancesRH 1EFA, 901, 3.5, show=Y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Will show distances between all atoms in resi 901 of 1EFA and all atoms within 3.5 Å (figure 2, left).&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
distancesRH 1EFA, 901, 3.5, show=Y, Hbonds=Y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Distances will now be calculated between atoms that can form H bonds only (figure 2, right).&lt;br /&gt;
&lt;br /&gt;
[[File:distancesRH_ex2.png|450px|example #2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''example #3'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
distancesRH 1EFA, 18, 4.7, chain=B, show=Y, aname=NE2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Distances between atom NE2 of residue 19 in chain B of 1EFA and all atoms within 4.7 Å (all of which are in the DNA fragment of chain D, figure 3).&lt;br /&gt;
&lt;br /&gt;
[[File:distancesRH_ex3.png|300px|example #3]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Notes, Further Developments and Requests ==&lt;br /&gt;
* This script works with visible objects (handling of multiple states will hopefully be implemented soon)&lt;br /&gt;
* As it is intended to be user-friendly more than fast, this script is not suitable to calculate distances between large objects. Use [[Quick_dist]] instead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
* '''11/01/2013''' - edit #1: ''distances measured between different chains''&lt;br /&gt;
* '''13/01/2013''' - edit #2: ''print output optimsed''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Code ==&lt;br /&gt;
&lt;br /&gt;
Copy the following text and save it as distancesRH.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
Given an object, a reference amino acid and a radius, this scripts calculates pairwise&lt;br /&gt;
distances between all atoms in the reference and all atoms that fall within the given range.&lt;br /&gt;
Distances are either returned on screen (default) or printed on file.&lt;br /&gt;
Distances can be calculated from a single atom only.&lt;br /&gt;
Optionally, only atoms that can form H-bonds can be returned (but check distances!)&lt;br /&gt;
&lt;br /&gt;
More information at: PymolWiki&lt;br /&gt;
http://pymolwiki.org/index.php/DistancesRH&lt;br /&gt;
&lt;br /&gt;
AUTHOR&lt;br /&gt;
Pietro Gatti-Lafranconi, 2012&lt;br /&gt;
Please inform me if you use/improve/like/dislike/publish with this script.&lt;br /&gt;
CC BY-NC-SA&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
from pymol import cmd, stored, math&lt;br /&gt;
	&lt;br /&gt;
def distancesRH (obj, ref, dist, chain=0, output=&amp;quot;S&amp;quot;, show=&amp;quot;N&amp;quot;, Hbonds=&amp;quot;N&amp;quot;, aname=&amp;quot;*&amp;quot;):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;	&lt;br /&gt;
	usage: distancesRH obj, ref, dist, [chain, [output S/P/N, [show Y/N, [Hbonds Y/N, [aname]]]]]&lt;br /&gt;
	&lt;br /&gt;
	obj: object name, ref:reference aa, dist: radius in A, chain: selected chain&lt;br /&gt;
	output: accepts S (screen), P (print) or N (none), default=S&lt;br /&gt;
	show: shows distances in pymol window, default=N&lt;br /&gt;
	Hbonds: restricts results to atoms that can form Hbonds, default=N&lt;br /&gt;
	aname: name of a specific atom in ref (to calculate distances from one atom only)&lt;br /&gt;
		&lt;br /&gt;
	example: distancesRH 2WHH, 25, 3.2, [B, [S, [N, [Y, [CB]]]]]&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	print &amp;quot;&amp;quot;&lt;br /&gt;
	#delete previous selections and displayed distances&lt;br /&gt;
	cmd.delete (&amp;quot;dist*&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Atoms&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Residues&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Reference&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Hbonds&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;RefAtom&amp;quot;)&lt;br /&gt;
	#creates and names selections	&lt;br /&gt;
	if chain==0: cen=obj&lt;br /&gt;
	else: cen=obj+&amp;quot; and chain &amp;quot;+chain&lt;br /&gt;
	refA=&amp;quot; and resi &amp;quot;+ref+&amp;quot; and name &amp;quot;+aname&lt;br /&gt;
	cmd.select(&amp;quot;Reference&amp;quot;, &amp;quot;byres &amp;quot;+cen+refA)&lt;br /&gt;
	m1=cmd.get_model (&amp;quot;Reference&amp;quot;)&lt;br /&gt;
	if aname!=&amp;quot;*&amp;quot;:&lt;br /&gt;
		cmd.select(&amp;quot;RefAtom&amp;quot;, cen+refA)&lt;br /&gt;
		m1=cmd.get_model (&amp;quot;RefAtom&amp;quot;)&lt;br /&gt;
	cmd.select(&amp;quot;Atoms&amp;quot;, cen+refA+&amp;quot; around &amp;quot;+str(dist)+&amp;quot; and not resi &amp;quot;+ref+&amp;quot; and &amp;quot;+obj)&lt;br /&gt;
	cmd.show(&amp;quot;nb_spheres&amp;quot;, &amp;quot;(Atoms or Reference) and (resn HOH or HET)&amp;quot;)&lt;br /&gt;
	cmd.select(&amp;quot;Residues&amp;quot;, &amp;quot;byres Atoms&amp;quot;)&lt;br /&gt;
	m2=cmd.get_model(&amp;quot;Atoms and visible&amp;quot;)	&lt;br /&gt;
	if Hbonds==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		cmd.select(&amp;quot;__Hbonds1&amp;quot;, &amp;quot;Reference and not symbol c&amp;quot;)&lt;br /&gt;
		if aname!=&amp;quot;*&amp;quot;:&lt;br /&gt;
			cmd.select(&amp;quot;__Hbonds1&amp;quot;, &amp;quot;RefAtom and not symbol c&amp;quot;)&lt;br /&gt;
		cmd.select(&amp;quot;__Hbonds2&amp;quot;, &amp;quot;Atoms and not symbol c&amp;quot;)&lt;br /&gt;
		cmd.select(&amp;quot;Hbonds&amp;quot;, &amp;quot;__Hbonds1 or __Hbonds2&amp;quot;)&lt;br /&gt;
		cmd.show(&amp;quot;lines&amp;quot;, &amp;quot;Hbonds&amp;quot;)&lt;br /&gt;
		m1=cmd.get_model (&amp;quot;__Hbonds1&amp;quot;)&lt;br /&gt;
		m2=cmd.get_model (&amp;quot;__Hbonds2 and visible&amp;quot;)	&lt;br /&gt;
	&lt;br /&gt;
	#controllers	&lt;br /&gt;
	if (not (output==&amp;quot;S&amp;quot; or output==&amp;quot;N&amp;quot; or output==&amp;quot;P&amp;quot;)) or (not (show==&amp;quot;Y&amp;quot; or show==&amp;quot;N&amp;quot;)) or (not (Hbonds==&amp;quot;Y&amp;quot; or Hbonds==&amp;quot;N&amp;quot;)):&lt;br /&gt;
		print &amp;quot;Malformed input, please try again&amp;quot;&lt;br /&gt;
		return&lt;br /&gt;
	abort=1&lt;br /&gt;
	abort2=0&lt;br /&gt;
	mc=cmd.get_model(cen)&lt;br /&gt;
	for c0 in range(len(mc.atom)):&lt;br /&gt;
		if mc.atom[c0].resi==ref: abort=0&lt;br /&gt;
	mc2=cmd.get_model(cen+refA)&lt;br /&gt;
	if aname!=&amp;quot;*&amp;quot;:&lt;br /&gt;
		abort2=1&lt;br /&gt;
		for c00 in range (len(mc2.atom)):	&lt;br /&gt;
			if mc2.atom[c00].name==aname: abort2=0&lt;br /&gt;
	if Hbonds==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		if aname[0]==&amp;quot;C&amp;quot;:&lt;br /&gt;
			print &amp;quot;Warning: no atoms in the selection can form H-bonds&amp;quot;&lt;br /&gt;
			return&lt;br /&gt;
	if abort==1: print &amp;quot;Warning: no such residue in the reference object&amp;quot;&lt;br /&gt;
	if abort2==1: &lt;br /&gt;
		if abort==0: print &amp;quot;Warning: no such atom in the reference object&amp;quot;&lt;br /&gt;
	if abort==1 or abort2==1: return&lt;br /&gt;
&lt;br /&gt;
	#measures distances&lt;br /&gt;
	distance2=[]&lt;br /&gt;
	distances=[]&lt;br /&gt;
	screenOP=&amp;quot;&amp;quot;	&lt;br /&gt;
	fileOP=&amp;quot;&amp;quot;&lt;br /&gt;
	for c1 in range(len(m1.atom)):&lt;br /&gt;
		for c2 in range(len(m2.atom)):&lt;br /&gt;
			if math.sqrt(sum(map(lambda f: (f[0]-f[1])**2, zip(m1.atom[c1].coord,m2.atom[c2].coord))))&amp;lt;float(dist):&lt;br /&gt;
				distance=cmd.distance (obj+&amp;quot;//&amp;quot;+m1.atom[c1].chain+&amp;quot;/&amp;quot;+m1.atom[c1].resi+&amp;quot;/&amp;quot;+m1.atom[c1].name, obj+&amp;quot;//&amp;quot;+m2.atom[c2].chain+&amp;quot;/&amp;quot;+m2.atom[c2].resi+&amp;quot;/&amp;quot;+m2.atom[c2].name)&lt;br /&gt;
				distances.append(distance)&lt;br /&gt;
				screenOP+=&amp;quot;%s/%s/%s/%s to %s/%s/%s/%s: %.3f\n&amp;quot; % (m1.atom[c1].chain,m1.atom[c1].resn,m1.atom[c1].resi,m1.atom[c1].name,m2.atom[c2].chain,m2.atom[c2].resn,m2.atom[c2].resi,m2.atom[c2].name, distance)&lt;br /&gt;
				fileOP+=&amp;quot;%s/%s/%s/%s\t\t\t%s/%s/%s/%s\t\t\t\t%.5f\n&amp;quot;%  (m1.atom[c1].chain,m1.atom[c1].resn,m1.atom[c1].resi,m1.atom[c1].name,m2.atom[c2].chain,m2.atom[c2].resn,m2.atom[c2].resi,m2.atom[c2].name, distance)	&lt;br /&gt;
	#last controller&lt;br /&gt;
	if len(distances)==0:&lt;br /&gt;
		if abort2==0:&lt;br /&gt;
			print &amp;quot;Warning: no atoms within the selected range&amp;quot;&lt;br /&gt;
		return&lt;br /&gt;
&lt;br /&gt;
	#data outputs&lt;br /&gt;
	if output==&amp;quot;N&amp;quot;: print &amp;quot;Data recorded, but not printed&amp;quot;&lt;br /&gt;
	if output==&amp;quot;S&amp;quot;:&lt;br /&gt;
		print &amp;quot;Distance of atoms in &amp;quot;+obj+&amp;quot;/&amp;quot;+ref+&amp;quot;/&amp;quot;+aname+&amp;quot; to all atoms within &amp;quot;+dist+&amp;quot; Angstroms&amp;quot;&lt;br /&gt;
		if Hbonds==&amp;quot;Y&amp;quot;: print &amp;quot;Distances restricted to potential H-bond pairs&amp;quot;&lt;br /&gt;
		print screenOP	&lt;br /&gt;
	if output==&amp;quot;P&amp;quot;:&lt;br /&gt;
		if aname==&amp;quot;*&amp;quot;: aname=&amp;quot;ALL&amp;quot;&lt;br /&gt;
		print 'data printed in &amp;quot;distances_rH_'+ref+'-'+aname+'.txt&amp;quot; file'&lt;br /&gt;
		f=open('distances_rH_'+ref+'-'+aname+'.txt','w')&lt;br /&gt;
		f.write(&amp;quot;Pairwise distances betweet atoms in %s and all atoms within %s Angstroms\n&amp;quot; % (obj+&amp;quot;/&amp;quot;+ref+&amp;quot;/&amp;quot;+aname, dist))&lt;br /&gt;
		if Hbonds==&amp;quot;Y&amp;quot;: f.write(&amp;quot;Distances restricted to potential H-bond pairs\n&amp;quot;)&lt;br /&gt;
		f.write(&amp;quot;Atom in reference\tAtom in destination\t\tdistance\n&amp;quot;)&lt;br /&gt;
		f.write(fileOP)&lt;br /&gt;
		f.close()&lt;br /&gt;
	print &amp;quot;All done! Good luck with your data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	#graphical output&lt;br /&gt;
	if show==&amp;quot;N&amp;quot;: cmd.delete (&amp;quot;dist*&amp;quot;)&lt;br /&gt;
	if show==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		cmd.show(&amp;quot;lines&amp;quot;, &amp;quot;Reference&amp;quot;)&lt;br /&gt;
		cmd.show(&amp;quot;lines&amp;quot;, &amp;quot;Residues&amp;quot;)&lt;br /&gt;
				&lt;br /&gt;
cmd.extend(&amp;quot;distancesRH&amp;quot;, distancesRH);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Script_Library]]&lt;br /&gt;
[[Category:ObjSel_Scripts]]&lt;br /&gt;
[[Category:Biochemical_Scripts]]&lt;br /&gt;
[[Category:Structural_Biology_Scripts]]&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=User:PietroGattiLafranconi&amp;diff=11867</id>
		<title>User:PietroGattiLafranconi</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=User:PietroGattiLafranconi&amp;diff=11867"/>
		<updated>2014-04-25T17:02:42Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Contributed [[DistancesRH]], [[ListSelection2]] and [[Pairwise_distances]]&lt;br /&gt;
* Will be happy to receive feedbacks/suggestions&lt;br /&gt;
* can be found [http://www2.bio.cam.ac.uk/~fhlab/pg356.php here]&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=User:PietroGattiLafranconi&amp;diff=3055</id>
		<title>User:PietroGattiLafranconi</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=User:PietroGattiLafranconi&amp;diff=3055"/>
		<updated>2014-01-08T17:59:56Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: link updated&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Is new to PyMOLWiki&lt;br /&gt;
* Submitted [[DistancesRH]], [[ListSelection2]] and [[Pairwise_distances]]&lt;br /&gt;
* Will be happy to receive feedbacks/suggestions&lt;br /&gt;
* can be found [www2.bio.cam.ac.uk/~fhlab/pg356.php here]&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=Pairwise_distances&amp;diff=7920</id>
		<title>Pairwise distances</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=Pairwise_distances&amp;diff=7920"/>
		<updated>2013-07-24T17:56:54Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox script-repo&lt;br /&gt;
|type      = script&lt;br /&gt;
|download  = &lt;br /&gt;
|author    = [[User:PietroGattiLafranconi|Pietro Gatti-Lafranconi]]&lt;br /&gt;
|license   = [http://creativecommons.org/licenses/by-nc-sa/3.0 CC BY-NC-SA]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Given any two selections, this script calculates and returns the pairwise distances between all atoms that fall within a defined distance.&lt;br /&gt;
&lt;br /&gt;
Can be used to measure distances within the same chain, between different chains or different objects.&lt;br /&gt;
&lt;br /&gt;
Distances can be restricted to sidechain atoms only and the outputs either displayed on screen or printed on file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
 pairwise_dist sel1, sel2, max_dist, [output=S/P/N, [sidechain=N/Y, [show=Y/N]]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Required Arguments ==&lt;br /&gt;
* '''sel1''' = first selection&lt;br /&gt;
* '''sel2''' = second selection&lt;br /&gt;
* '''max_dist''' = max distance in Angstroms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Optional Arguments ==&lt;br /&gt;
* '''output''' = accepts Screen/Print/None (default N)&lt;br /&gt;
* '''sidechain''' = limits (Y) results to sidechain atoms (default N)&lt;br /&gt;
* '''show''' = shows (Y) individual distances in pymol menu (default=N)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
'''example #1'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;pairwise_dist 1efa and chain D, 1efa and chain B, 3, output=S, show=Y&lt;br /&gt;
 &lt;br /&gt;
1efa/D/DC/13/OP1 to 1efa/B/TYR/47/OH: 2.765&lt;br /&gt;
1efa/D/DC/13/OP2 to 1efa/B/LEU/6/N: 2.983&lt;br /&gt;
1efa/D/DC/13/OP2 to 1efa/B/LEU/6/CB: 2.928&lt;br /&gt;
1efa/D/DT/14/O4' to 1efa/B/ALA/57/CB: 2.827&lt;br /&gt;
1efa/D/DT/14/OP1 to 1efa/B/ASN/25/OD1: 2.858&lt;br /&gt;
1efa/D/DT/14/OP1 to 1efa/B/GLN/54/NE2: 2.996&lt;br /&gt;
1efa/D/DT/14/OP2 to 1efa/B/SER/21/OG: 2.517&lt;br /&gt;
1efa/D/DC/15/N4 to 1efa/B/GLN/18/NE2: 2.723&lt;br /&gt;
1efa/D/DA/16/N6 to 1efa/B/GLN/18/NE2: 2.931&lt;br /&gt;
 &lt;br /&gt;
Number of distances calculated: 9&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:pairwise1.png|450px|example #1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''example #2'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;pairwise_dist 2w8s and chain a, 2W8s and chain b, 3, sidechain=Y, output=S, show=Y&lt;br /&gt;
 &lt;br /&gt;
2W8S/A/GLN/432/OE1 to 2W8S/B/ARG/503/NH2: 2.758&lt;br /&gt;
2W8S/A/ASP/434/OD1 to 2W8S/B/SER/493/OG: 2.444&lt;br /&gt;
2W8S/A/TYR/447/OH to 2W8S/B/GLN/485/NE2: 2.878&lt;br /&gt;
2W8S/A/HIS/449/NE2 to 2W8S/B/SER/489/OG: 2.686&lt;br /&gt;
2W8S/A/GLN/485/OE1 to 2W8S/B/TYR/447/OH: 2.971&lt;br /&gt;
2W8S/A/SER/489/OG to 2W8S/B/HIS/449/NE2: 2.913&lt;br /&gt;
2W8S/A/SER/493/OG to 2W8S/B/ASP/434/OD1: 2.491&lt;br /&gt;
2W8S/A/ARG/503/NH2 to 2W8S/B/GLN/432/OE1: 2.653&lt;br /&gt;
 &lt;br /&gt;
Number of distances calculated: 8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:pairwise2.png|450px|example #2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''example #3'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;pairwise_dist 1FOS and chain H and resi 290:300, 1FOS and chain G, 4, sidechain=Y, show=Y, output=P&lt;br /&gt;
 &lt;br /&gt;
Results saved in IntAtoms_4.txt&lt;br /&gt;
Number of distances calculated: 24&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:pairwise3.png|450px|example #3]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Code ==&lt;br /&gt;
&lt;br /&gt;
Copy the following text and save it as pairwisedistances.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from pymol import cmd, stored, math&lt;br /&gt;
&lt;br /&gt;
def pairwise_dist(sel1, sel2, max_dist, output=&amp;quot;N&amp;quot;, sidechain=&amp;quot;N&amp;quot;, show=&amp;quot;N&amp;quot;):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	usage: pairwise_dist sel1, sel2, max_dist, [output=S/P/N, [sidechain=N/Y, [show=Y/N]]]&lt;br /&gt;
	sel1 and sel2 can be any to pre-existing or newly defined selections&lt;br /&gt;
	max_dist: maximum distance in Angstrom between atoms in the two selections&lt;br /&gt;
	--optional settings:&lt;br /&gt;
	output: accepts Screen/Print/None (default N)&lt;br /&gt;
	sidechain: limits (Y) results to sidechain atoms (default N)&lt;br /&gt;
	show: shows (Y) individual distances in pymol menu (default=N)&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	print &amp;quot;&amp;quot;&lt;br /&gt;
	cmd.delete (&amp;quot;dist*&amp;quot;)&lt;br /&gt;
	extra=&amp;quot;&amp;quot;&lt;br /&gt;
	if sidechain==&amp;quot;Y&amp;quot;: extra=&amp;quot; and not name c+o+n&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	#builds models&lt;br /&gt;
	m1=cmd.get_model(sel2+&amp;quot; around &amp;quot;+str(max_dist)+&amp;quot; and &amp;quot;+sel1+extra)&lt;br /&gt;
	m1o=cmd.get_object_list(sel1)&lt;br /&gt;
	m2=cmd.get_model(sel1+&amp;quot; around &amp;quot;+str(max_dist)+&amp;quot; and &amp;quot;+sel2+extra)&lt;br /&gt;
	m2o=cmd.get_object_list(sel2)&lt;br /&gt;
&lt;br /&gt;
	#defines selections&lt;br /&gt;
	cmd.select(&amp;quot;__tsel1a&amp;quot;, sel1+&amp;quot; around &amp;quot;+str(max_dist)+&amp;quot; and &amp;quot;+sel2+extra)&lt;br /&gt;
	cmd.select(&amp;quot;__tsel1&amp;quot;, &amp;quot;__tsel1a and &amp;quot;+sel2+extra)&lt;br /&gt;
	cmd.select(&amp;quot;__tsel2a&amp;quot;, sel2+&amp;quot; around &amp;quot;+str(max_dist)+&amp;quot; and &amp;quot;+sel1+extra)&lt;br /&gt;
	cmd.select(&amp;quot;__tsel2&amp;quot;, &amp;quot;__tsel2a and &amp;quot;+sel1+extra)&lt;br /&gt;
	cmd.select(&amp;quot;IntAtoms_&amp;quot;+max_dist, &amp;quot;__tsel1 or __tsel2&amp;quot;)&lt;br /&gt;
	cmd.select(&amp;quot;IntRes_&amp;quot;+max_dist, &amp;quot;byres IntAtoms_&amp;quot;+max_dist)&lt;br /&gt;
 &lt;br /&gt;
	#controlers-1&lt;br /&gt;
	if len(m1o)==0: &lt;br /&gt;
		print &amp;quot;warning, '&amp;quot;+sel1+extra+&amp;quot;' does not contain any atoms.&amp;quot;&lt;br /&gt;
		return&lt;br /&gt;
	if len(m2o)==0: &lt;br /&gt;
		print &amp;quot;warning, '&amp;quot;+sel2+extra+&amp;quot;' does not contain any atoms.&amp;quot;&lt;br /&gt;
		return&lt;br /&gt;
	&lt;br /&gt;
	#measures distances&lt;br /&gt;
	s=&amp;quot;&amp;quot;&lt;br /&gt;
	counter=0&lt;br /&gt;
	for c1 in range(len(m1.atom)):&lt;br /&gt;
		for c2 in range(len(m2.atom)):&lt;br /&gt;
			distance=math.sqrt(sum(map(lambda f: (f[0]-f[1])**2, zip(m1.atom[c1].coord,m2.atom[c2].coord))))&lt;br /&gt;
			if distance&amp;lt;float(max_dist):&lt;br /&gt;
				s+=&amp;quot;%s/%s/%s/%s/%s to %s/%s/%s/%s/%s: %.3f\n&amp;quot; % (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)&lt;br /&gt;
				counter+=1&lt;br /&gt;
				if show==&amp;quot;Y&amp;quot;: cmd.distance (m1o[0]+&amp;quot; and &amp;quot;+m1.atom[c1].chain+&amp;quot;/&amp;quot;+m1.atom[c1].resi+&amp;quot;/&amp;quot;+m1.atom[c1].name, m2o[0]+&amp;quot; and &amp;quot;+m2.atom[c2].chain+&amp;quot;/&amp;quot;+m2.atom[c2].resi+&amp;quot;/&amp;quot;+m2.atom[c2].name)&lt;br /&gt;
&lt;br /&gt;
	#controler-2&lt;br /&gt;
	if counter==0: &lt;br /&gt;
		print &amp;quot;warning, no distances were measured! Check your selections/max_dist value&amp;quot;&lt;br /&gt;
		return&lt;br /&gt;
	&lt;br /&gt;
	#outputs&lt;br /&gt;
	if output==&amp;quot;S&amp;quot;: print s&lt;br /&gt;
	if output==&amp;quot;P&amp;quot;:&lt;br /&gt;
		f=open('IntAtoms_'+max_dist+'.txt','w')&lt;br /&gt;
		f.write(&amp;quot;Number of distances calculated: %s\n&amp;quot; % (counter))&lt;br /&gt;
		f.write(s)&lt;br /&gt;
		f.close()&lt;br /&gt;
		print &amp;quot;Results saved in IntAtoms_%s.txt&amp;quot; % max_dist&lt;br /&gt;
	print &amp;quot;Number of distances calculated: %s&amp;quot; % (counter)&lt;br /&gt;
	cmd.hide(&amp;quot;lines&amp;quot;, &amp;quot;IntRes_*&amp;quot;)&lt;br /&gt;
	if show==&amp;quot;Y&amp;quot;: cmd.show(&amp;quot;lines&amp;quot;,&amp;quot;IntRes_&amp;quot;+max_dist)&lt;br /&gt;
	cmd.deselect()&lt;br /&gt;
  &lt;br /&gt;
cmd.extend(&amp;quot;pairwise_dist&amp;quot;, pairwise_dist)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Script_Library]]&lt;br /&gt;
[[Category:ObjSel_Scripts]]&lt;br /&gt;
[[Category:Biochemical_Scripts]]&lt;br /&gt;
[[Category:Structural_Biology_Scripts]]&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=User:PietroGattiLafranconi&amp;diff=3054</id>
		<title>User:PietroGattiLafranconi</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=User:PietroGattiLafranconi&amp;diff=3054"/>
		<updated>2013-07-24T17:53:59Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Is new to PyMOLWiki&lt;br /&gt;
* Submitted [[DistancesRH]], [[ListSelection2]] and [[Pairwise_distances]]&lt;br /&gt;
* Will be happy to receive feedbacks/suggestions&lt;br /&gt;
* can be found [http://www.bio.cam.ac.uk/~fhlab/members/pg356.shtml here]&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=Pairwise_distances&amp;diff=11929</id>
		<title>Pairwise distances</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=Pairwise_distances&amp;diff=11929"/>
		<updated>2013-07-24T17:52:23Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: page created&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox script-repo&lt;br /&gt;
|type      = script&lt;br /&gt;
|download  = &lt;br /&gt;
|author    = [[User:PietroGattiLafranconi|Pietro Gatti-Lafranconi]]&lt;br /&gt;
|license   = [http://creativecommons.org/licenses/by-nc-sa/3.0 CC BY-NC-SA]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Given any two selections, this script calculates and returns the pairwise distances between all atoms that fall within a defined distance.&lt;br /&gt;
Can be used to measure distances within the same chain, between different chains or different objects.&lt;br /&gt;
Distances can be restricted to sidechain atoms only and the outputs either displayed on screen or printed on file.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
 pairwise_dist sel1, sel2, max_dist, [output=S/P/N, [sidechain=N/Y, [show=Y/N]]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Required Arguments ==&lt;br /&gt;
* '''sel1''' = first selection&lt;br /&gt;
* '''sel2''' = second selection&lt;br /&gt;
* '''max_dist''' = max distance in Angstroms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Optional Arguments ==&lt;br /&gt;
* '''output''' = accepts Screen/Print/None (default N)&lt;br /&gt;
* '''sidechain''' = limits (Y) results to sidechain atoms (default N)&lt;br /&gt;
* '''show''' = shows (Y) individual distances in pymol menu (default=N)&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
'''example #1'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;pairwise_dist 1efa and chain D, 1efa and chain B, 3, output=S, show=Y&lt;br /&gt;
 &lt;br /&gt;
1efa/D/DC/13/OP1 to 1efa/B/TYR/47/OH: 2.765&lt;br /&gt;
1efa/D/DC/13/OP2 to 1efa/B/LEU/6/N: 2.983&lt;br /&gt;
1efa/D/DC/13/OP2 to 1efa/B/LEU/6/CB: 2.928&lt;br /&gt;
1efa/D/DT/14/O4' to 1efa/B/ALA/57/CB: 2.827&lt;br /&gt;
1efa/D/DT/14/OP1 to 1efa/B/ASN/25/OD1: 2.858&lt;br /&gt;
1efa/D/DT/14/OP1 to 1efa/B/GLN/54/NE2: 2.996&lt;br /&gt;
1efa/D/DT/14/OP2 to 1efa/B/SER/21/OG: 2.517&lt;br /&gt;
1efa/D/DC/15/N4 to 1efa/B/GLN/18/NE2: 2.723&lt;br /&gt;
1efa/D/DA/16/N6 to 1efa/B/GLN/18/NE2: 2.931&lt;br /&gt;
 &lt;br /&gt;
Number of distances calculated: 9&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:pairwise1.png|450px|example #1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''example #2'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;pairwise_dist 2w8s and chain a, 2W8s and chain b, 3, sidechain=Y, output=S, show=Y&lt;br /&gt;
 &lt;br /&gt;
2W8S/A/GLN/432/OE1 to 2W8S/B/ARG/503/NH2: 2.758&lt;br /&gt;
2W8S/A/ASP/434/OD1 to 2W8S/B/SER/493/OG: 2.444&lt;br /&gt;
2W8S/A/TYR/447/OH to 2W8S/B/GLN/485/NE2: 2.878&lt;br /&gt;
2W8S/A/HIS/449/NE2 to 2W8S/B/SER/489/OG: 2.686&lt;br /&gt;
2W8S/A/GLN/485/OE1 to 2W8S/B/TYR/447/OH: 2.971&lt;br /&gt;
2W8S/A/SER/489/OG to 2W8S/B/HIS/449/NE2: 2.913&lt;br /&gt;
2W8S/A/SER/493/OG to 2W8S/B/ASP/434/OD1: 2.491&lt;br /&gt;
2W8S/A/ARG/503/NH2 to 2W8S/B/GLN/432/OE1: 2.653&lt;br /&gt;
 &lt;br /&gt;
Number of distances calculated: 8&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:pairwise2.png|450px|example #2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''example #3'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;pairwise_dist 1FOS and chain H and resi 290:300, 1FOS and chain G, 4, sidechain=Y, show=Y, output=P&lt;br /&gt;
 &lt;br /&gt;
Results saved in IntAtoms_4.txt&lt;br /&gt;
Number of distances calculated: 24&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[File:pairwise3.png|450px|example #3]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Code ==&lt;br /&gt;
&lt;br /&gt;
Copy the following text and save it as pairwisedistances.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from pymol import cmd, stored, math&lt;br /&gt;
&lt;br /&gt;
def pairwise_dist(sel1, sel2, max_dist, output=&amp;quot;N&amp;quot;, sidechain=&amp;quot;N&amp;quot;, show=&amp;quot;N&amp;quot;):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	usage: pairwise_dist sel1, sel2, max_dist, [output=S/P/N, [sidechain=N/Y, [show=Y/N]]]&lt;br /&gt;
	sel1 and sel2 can be any to pre-existing or newly defined selections&lt;br /&gt;
	max_dist: maximum distance in Angstrom between atoms in the two selections&lt;br /&gt;
	--optional settings:&lt;br /&gt;
	output: accepts Screen/Print/None (default N)&lt;br /&gt;
	sidechain: limits (Y) results to sidechain atoms (default N)&lt;br /&gt;
	show: shows (Y) individual distances in pymol menu (default=N)&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	print &amp;quot;&amp;quot;&lt;br /&gt;
	cmd.delete (&amp;quot;dist*&amp;quot;)&lt;br /&gt;
	extra=&amp;quot;&amp;quot;&lt;br /&gt;
	if sidechain==&amp;quot;Y&amp;quot;: extra=&amp;quot; and not name c+o+n&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	#builds models&lt;br /&gt;
	m1=cmd.get_model(sel2+&amp;quot; around &amp;quot;+str(max_dist)+&amp;quot; and &amp;quot;+sel1+extra)&lt;br /&gt;
	m1o=cmd.get_object_list(sel1)&lt;br /&gt;
	m2=cmd.get_model(sel1+&amp;quot; around &amp;quot;+str(max_dist)+&amp;quot; and &amp;quot;+sel2+extra)&lt;br /&gt;
	m2o=cmd.get_object_list(sel2)&lt;br /&gt;
&lt;br /&gt;
	#defines selections&lt;br /&gt;
	cmd.select(&amp;quot;__tsel1a&amp;quot;, sel1+&amp;quot; around &amp;quot;+str(max_dist)+&amp;quot; and &amp;quot;+sel2+extra)&lt;br /&gt;
	cmd.select(&amp;quot;__tsel1&amp;quot;, &amp;quot;__tsel1a and &amp;quot;+sel2+extra)&lt;br /&gt;
	cmd.select(&amp;quot;__tsel2a&amp;quot;, sel2+&amp;quot; around &amp;quot;+str(max_dist)+&amp;quot; and &amp;quot;+sel1+extra)&lt;br /&gt;
	cmd.select(&amp;quot;__tsel2&amp;quot;, &amp;quot;__tsel2a and &amp;quot;+sel1+extra)&lt;br /&gt;
	cmd.select(&amp;quot;IntAtoms_&amp;quot;+max_dist, &amp;quot;__tsel1 or __tsel2&amp;quot;)&lt;br /&gt;
	cmd.select(&amp;quot;IntRes_&amp;quot;+max_dist, &amp;quot;byres IntAtoms_&amp;quot;+max_dist)&lt;br /&gt;
 &lt;br /&gt;
	#controlers-1&lt;br /&gt;
	if len(m1o)==0: &lt;br /&gt;
		print &amp;quot;warning, '&amp;quot;+sel1+extra+&amp;quot;' does not contain any atoms.&amp;quot;&lt;br /&gt;
		return&lt;br /&gt;
	if len(m2o)==0: &lt;br /&gt;
		print &amp;quot;warning, '&amp;quot;+sel2+extra+&amp;quot;' does not contain any atoms.&amp;quot;&lt;br /&gt;
		return&lt;br /&gt;
	&lt;br /&gt;
	#measures distances&lt;br /&gt;
	s=&amp;quot;&amp;quot;&lt;br /&gt;
	counter=0&lt;br /&gt;
	for c1 in range(len(m1.atom)):&lt;br /&gt;
		for c2 in range(len(m2.atom)):&lt;br /&gt;
			distance=math.sqrt(sum(map(lambda f: (f[0]-f[1])**2, zip(m1.atom[c1].coord,m2.atom[c2].coord))))&lt;br /&gt;
			if distance&amp;lt;float(max_dist):&lt;br /&gt;
				s+=&amp;quot;%s/%s/%s/%s/%s to %s/%s/%s/%s/%s: %.3f\n&amp;quot; % (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)&lt;br /&gt;
				counter+=1&lt;br /&gt;
				if show==&amp;quot;Y&amp;quot;: cmd.distance (m1o[0]+&amp;quot; and &amp;quot;+m1.atom[c1].chain+&amp;quot;/&amp;quot;+m1.atom[c1].resi+&amp;quot;/&amp;quot;+m1.atom[c1].name, m2o[0]+&amp;quot; and &amp;quot;+m2.atom[c2].chain+&amp;quot;/&amp;quot;+m2.atom[c2].resi+&amp;quot;/&amp;quot;+m2.atom[c2].name)&lt;br /&gt;
&lt;br /&gt;
	#controler-2&lt;br /&gt;
	if counter==0: &lt;br /&gt;
		print &amp;quot;warning, no distances were measured! Check your selections/max_dist value&amp;quot;&lt;br /&gt;
		return&lt;br /&gt;
	&lt;br /&gt;
	#outputs&lt;br /&gt;
	if output==&amp;quot;S&amp;quot;: print s&lt;br /&gt;
	if output==&amp;quot;P&amp;quot;:&lt;br /&gt;
		f=open('IntAtoms_'+max_dist+'.txt','w')&lt;br /&gt;
		f.write(&amp;quot;Number of distances calculated: %s\n&amp;quot; % (counter))&lt;br /&gt;
		f.write(s)&lt;br /&gt;
		f.close()&lt;br /&gt;
		print &amp;quot;Results saved in IntAtoms_%s.txt&amp;quot; % max_dist&lt;br /&gt;
	print &amp;quot;Number of distances calculated: %s&amp;quot; % (counter)&lt;br /&gt;
	cmd.hide(&amp;quot;lines&amp;quot;, &amp;quot;IntRes_*&amp;quot;)&lt;br /&gt;
	if show==&amp;quot;Y&amp;quot;: cmd.show(&amp;quot;lines&amp;quot;,&amp;quot;IntRes_&amp;quot;+max_dist)&lt;br /&gt;
	cmd.deselect()&lt;br /&gt;
  &lt;br /&gt;
cmd.extend(&amp;quot;pairwise_dist&amp;quot;, pairwise_dist)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Script_Library]]&lt;br /&gt;
[[Category:ObjSel_Scripts]]&lt;br /&gt;
[[Category:Biochemical_Scripts]]&lt;br /&gt;
[[Category:Structural_Biology_Scripts]]&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=File:Pairwise3.png&amp;diff=1946</id>
		<title>File:Pairwise3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=File:Pairwise3.png&amp;diff=1946"/>
		<updated>2013-07-24T17:50:27Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=File:Pairwise2.png&amp;diff=2439</id>
		<title>File:Pairwise2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=File:Pairwise2.png&amp;diff=2439"/>
		<updated>2013-07-24T17:50:17Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=File:Pairwise1.png&amp;diff=2197</id>
		<title>File:Pairwise1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=File:Pairwise1.png&amp;diff=2197"/>
		<updated>2013-07-24T17:49:39Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=ListSelection2&amp;diff=6269</id>
		<title>ListSelection2</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=ListSelection2&amp;diff=6269"/>
		<updated>2013-03-14T15:45:56Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox script-repo&lt;br /&gt;
|type      = script&lt;br /&gt;
|download  = &lt;br /&gt;
|author    = [[User:PietroGattiLafranconi|Pietro Gatti-Lafranconi]]&lt;br /&gt;
|license   = [http://creativecommons.org/licenses/by-nc-sa/3.0 CC BY-NC-SA]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
= Overview =&lt;br /&gt;
Alternative script to [[List_Selection]] that will:&lt;br /&gt;
* list multiple residues once&lt;br /&gt;
* include water and hetatoms&lt;br /&gt;
* account for different chains/objects&lt;br /&gt;
* produce a screen/printed output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
listselection selection, [output=N/S/P, [HOH=Y/N ]]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
where:&lt;br /&gt;
* '''selection''' can be any existing or newly-defined selection&lt;br /&gt;
* '''output''' controls if the list is hidden (default), printed on screen (S) or saved in a file (P)&lt;br /&gt;
* '''HOH''' (default Y) allows to exclude (N) water residues from the list&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;listselection 1efa, output=P&lt;br /&gt;
Residues in '1efa': 1043&lt;br /&gt;
Results saved in listselection_1efa.txt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;listselection sele, output=S, HOH=N&lt;br /&gt;
Residues in 'sele, without HOH': 7&lt;br /&gt;
1LBH/A/ARG/86&lt;br /&gt;
1LBH/A/ALA/87&lt;br /&gt;
1LBH/A/ASP/88&lt;br /&gt;
1LBH/A/GLN/89&lt;br /&gt;
1LBH/A/LEU/90&lt;br /&gt;
1LBH/A/GLY/91&lt;br /&gt;
1LBH/A/ALA/92&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;listselection 1efa and resn LEU, output=S&lt;br /&gt;
Residues in '1efa and resn LEU': 108&lt;br /&gt;
1efa/A/LEU/6&lt;br /&gt;
1efa/A/LEU/45&lt;br /&gt;
1efa/A/LEU/56&lt;br /&gt;
[...]&lt;br /&gt;
1efa/C/LEU/323&lt;br /&gt;
1efa/C/LEU/330&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Code =&lt;br /&gt;
Copy the following text and save it as listselection.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from pymol import cmd, stored&lt;br /&gt;
 &lt;br /&gt;
def listselection (selection, output=&amp;quot;N&amp;quot;, HOH=&amp;quot;Y&amp;quot;):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;	&lt;br /&gt;
	usage: listselection selection, [output=N/S/P, [HOH=Y/N ]]&lt;br /&gt;
	&lt;br /&gt;
	More information at: PymolWiki: http://http://pymolwiki.org/index.php/ListSelection2&lt;br /&gt;
	AUTHOR: Pietro Gatti-Lafranconi, 2013&lt;br /&gt;
	Please inform me if you use/improve/like/dislike/publish with this script.&lt;br /&gt;
	CC BY-NC-SA&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	printedselection=&amp;quot;&amp;quot;&lt;br /&gt;
	extra=&amp;quot;&amp;quot;&lt;br /&gt;
	counter=0&lt;br /&gt;
	sel=selection&lt;br /&gt;
	objs=cmd.get_object_list(sel)&lt;br /&gt;
&lt;br /&gt;
	if HOH==&amp;quot;N&amp;quot;:&lt;br /&gt;
		sel=selection+&amp;quot; and not resn HOH&amp;quot;&lt;br /&gt;
		extra=&amp;quot;, without HOH&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	for a in range(len(objs)):&lt;br /&gt;
		m1=cmd.get_model(sel+&amp;quot; and &amp;quot;+objs[a])&lt;br /&gt;
		for x in range(len(m1.atom)):&lt;br /&gt;
			if m1.atom[x-1].resi!=m1.atom[x].resi:&lt;br /&gt;
				printedselection+=&amp;quot;%s/%s/%s/%s\n&amp;quot; % (objs[a], m1.atom[x].chain, m1.atom[x].resn, m1.atom[x].resi)&lt;br /&gt;
				counter+=1&lt;br /&gt;
				&lt;br /&gt;
	print &amp;quot;Residues in '%s%s': %s&amp;quot; % (selection, extra, counter)&lt;br /&gt;
	if output==&amp;quot;S&amp;quot;: print printedselection&lt;br /&gt;
	if output==&amp;quot;P&amp;quot;:&lt;br /&gt;
		f=open('listselection_'+selection+'.txt','w')&lt;br /&gt;
		f.write(&amp;quot;Residues in '%s%s': %s\n&amp;quot; % (selection, extra, counter))&lt;br /&gt;
		f.write(printedselection)&lt;br /&gt;
		f.close()&lt;br /&gt;
		print &amp;quot;Results saved in listselection_%s.txt&amp;quot; % selection&lt;br /&gt;
		&lt;br /&gt;
cmd.extend('listselection',listselection)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
[[Category:Script_Library]]&lt;br /&gt;
[[Category:ObjSel_Scripts]]&lt;br /&gt;
[[Category:Biochemical_Scripts]]&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=ListSelection2&amp;diff=6268</id>
		<title>ListSelection2</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=ListSelection2&amp;diff=6268"/>
		<updated>2013-03-14T15:44:06Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
Alternative script to [[List_Selection]] that will:&lt;br /&gt;
* list multiple residues once&lt;br /&gt;
* include water and hetatoms&lt;br /&gt;
* account for different chains/objects&lt;br /&gt;
* produce a screen/printed output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
listselection selection, [output=N/S/P, [HOH=Y/N ]]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
where:&lt;br /&gt;
* '''selection''' can be any existing or newly-defined selection&lt;br /&gt;
* '''output''' controls if the list is hidden (default), printed on screen (S) or saved in a file (P)&lt;br /&gt;
* '''HOH''' (default Y) allows to exclude (N) water residues from the list&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;listselection 1efa, output=P&lt;br /&gt;
Residues in '1efa': 1043&lt;br /&gt;
Results saved in listselection_1efa.txt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;listselection sele, output=S, HOH=N&lt;br /&gt;
Residues in 'sele, without HOH': 7&lt;br /&gt;
1LBH/A/ARG/86&lt;br /&gt;
1LBH/A/ALA/87&lt;br /&gt;
1LBH/A/ASP/88&lt;br /&gt;
1LBH/A/GLN/89&lt;br /&gt;
1LBH/A/LEU/90&lt;br /&gt;
1LBH/A/GLY/91&lt;br /&gt;
1LBH/A/ALA/92&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;listselection 1efa and resn LEU, output=S&lt;br /&gt;
Residues in '1efa and resn LEU': 108&lt;br /&gt;
1efa/A/LEU/6&lt;br /&gt;
1efa/A/LEU/45&lt;br /&gt;
1efa/A/LEU/56&lt;br /&gt;
[...]&lt;br /&gt;
1efa/C/LEU/323&lt;br /&gt;
1efa/C/LEU/330&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Code =&lt;br /&gt;
Copy the following text and save it as listselection.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from pymol import cmd, stored&lt;br /&gt;
 &lt;br /&gt;
def listselection (selection, output=&amp;quot;N&amp;quot;, HOH=&amp;quot;Y&amp;quot;):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;	&lt;br /&gt;
	usage: listselection selection, [output=N/S/P, [HOH=Y/N ]]&lt;br /&gt;
	&lt;br /&gt;
	More information at: PymolWiki: http://http://pymolwiki.org/index.php/ListSelection2&lt;br /&gt;
	AUTHOR: Pietro Gatti-Lafranconi, 2013&lt;br /&gt;
	Please inform me if you use/improve/like/dislike/publish with this script.&lt;br /&gt;
	CC BY-NC-SA&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	printedselection=&amp;quot;&amp;quot;&lt;br /&gt;
	extra=&amp;quot;&amp;quot;&lt;br /&gt;
	counter=0&lt;br /&gt;
	sel=selection&lt;br /&gt;
	objs=cmd.get_object_list(sel)&lt;br /&gt;
&lt;br /&gt;
	if HOH==&amp;quot;N&amp;quot;:&lt;br /&gt;
		sel=selection+&amp;quot; and not resn HOH&amp;quot;&lt;br /&gt;
		extra=&amp;quot;, without HOH&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	for a in range(len(objs)):&lt;br /&gt;
		m1=cmd.get_model(sel+&amp;quot; and &amp;quot;+objs[a])&lt;br /&gt;
		for x in range(len(m1.atom)):&lt;br /&gt;
			if m1.atom[x-1].resi!=m1.atom[x].resi:&lt;br /&gt;
				printedselection+=&amp;quot;%s/%s/%s/%s\n&amp;quot; % (objs[a], m1.atom[x].chain, m1.atom[x].resn, m1.atom[x].resi)&lt;br /&gt;
				counter+=1&lt;br /&gt;
				&lt;br /&gt;
	print &amp;quot;Residues in '%s%s': %s&amp;quot; % (selection, extra, counter)&lt;br /&gt;
	if output==&amp;quot;S&amp;quot;: print printedselection&lt;br /&gt;
	if output==&amp;quot;P&amp;quot;:&lt;br /&gt;
		f=open('listselection_'+selection+'.txt','w')&lt;br /&gt;
		f.write(&amp;quot;Residues in '%s%s': %s\n&amp;quot; % (selection, extra, counter))&lt;br /&gt;
		f.write(printedselection)&lt;br /&gt;
		f.close()&lt;br /&gt;
		print &amp;quot;Results saved in listselection_%s.txt&amp;quot; % selection&lt;br /&gt;
		&lt;br /&gt;
cmd.extend('listselection',listselection)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[Category:Script_Library|List Selection]]&lt;br /&gt;
[[Category:ObjSel_Scripts]]&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=ListSelection2&amp;diff=6267</id>
		<title>ListSelection2</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=ListSelection2&amp;diff=6267"/>
		<updated>2013-03-14T15:42:17Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
Alternative script to [[List_Selection]] that will:&lt;br /&gt;
* list multiple residues once&lt;br /&gt;
* include water and hetatoms&lt;br /&gt;
* account for different chains/objects&lt;br /&gt;
* produce a screen/printed output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
listselection selection, [output=N/S/P, [HOH=Y/N ]]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
where:&lt;br /&gt;
* '''selection''' can be any existing or newly-defined selection&lt;br /&gt;
* '''output''' controls if the list is hidden (default), printed on screen (S) or saved in a file (P)&lt;br /&gt;
* '''HOH''' (default Y) allows to exclude (N) water residues from the list&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;listselection 1efa, output=P&lt;br /&gt;
Residues in '1efa': 1043&lt;br /&gt;
Results saved in listselection_1efa.txt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;listselection sele, output=S, HOH=N&lt;br /&gt;
Residues in 'sele, without HOH': 5&lt;br /&gt;
2P9H\A\101\ARG&lt;br /&gt;
2P9H\A\102\SER&lt;br /&gt;
2P9H\A\103\GLY&lt;br /&gt;
2P9H\A\104\VAL&lt;br /&gt;
2P9H\A\105\GLU&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;listselection 1efa and resn LEU, output=S&lt;br /&gt;
Residues in '1EFA and resn LEU': 108&lt;br /&gt;
1efa\A\6\LEU&lt;br /&gt;
1efa\A\45\LEU&lt;br /&gt;
[...]&lt;br /&gt;
1efa\C\323\LEU&lt;br /&gt;
1efa\C\330\LEU&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Code =&lt;br /&gt;
Copy the following text and save it as listselection.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from pymol import cmd, stored&lt;br /&gt;
 &lt;br /&gt;
def listselection (selection, output=&amp;quot;N&amp;quot;, HOH=&amp;quot;Y&amp;quot;):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;	&lt;br /&gt;
	usage: listselection selection, [output=N/S/P, [HOH=Y/N ]]&lt;br /&gt;
	&lt;br /&gt;
	More information at: PymolWiki: http://http://pymolwiki.org/index.php/ListSelection2&lt;br /&gt;
	AUTHOR: Pietro Gatti-Lafranconi, 2013&lt;br /&gt;
	Please inform me if you use/improve/like/dislike/publish with this script.&lt;br /&gt;
	CC BY-NC-SA&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	printedselection=&amp;quot;&amp;quot;&lt;br /&gt;
	extra=&amp;quot;&amp;quot;&lt;br /&gt;
	counter=0&lt;br /&gt;
	sel=selection&lt;br /&gt;
	objs=cmd.get_object_list(sel)&lt;br /&gt;
&lt;br /&gt;
	if HOH==&amp;quot;N&amp;quot;:&lt;br /&gt;
		sel=selection+&amp;quot; and not resn HOH&amp;quot;&lt;br /&gt;
		extra=&amp;quot;, without HOH&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	for a in range(len(objs)):&lt;br /&gt;
		m1=cmd.get_model(sel+&amp;quot; and &amp;quot;+objs[a])&lt;br /&gt;
		for x in range(len(m1.atom)):&lt;br /&gt;
			if m1.atom[x-1].resi!=m1.atom[x].resi:&lt;br /&gt;
				printedselection+=&amp;quot;%s/%s/%s/%s\n&amp;quot; % (objs[a], m1.atom[x].chain, m1.atom[x].resn, m1.atom[x].resi)&lt;br /&gt;
				counter+=1&lt;br /&gt;
				&lt;br /&gt;
	print &amp;quot;Residues in '%s%s': %s&amp;quot; % (selection, extra, counter)&lt;br /&gt;
	if output==&amp;quot;S&amp;quot;: print printedselection&lt;br /&gt;
	if output==&amp;quot;P&amp;quot;:&lt;br /&gt;
		f=open('listselection_'+selection+'.txt','w')&lt;br /&gt;
		f.write(&amp;quot;Residues in '%s%s': %s\n&amp;quot; % (selection, extra, counter))&lt;br /&gt;
		f.write(printedselection)&lt;br /&gt;
		f.close()&lt;br /&gt;
		print &amp;quot;Results saved in listselection_%s.txt&amp;quot; % selection&lt;br /&gt;
		&lt;br /&gt;
cmd.extend('listselection',listselection)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[Category:Script_Library|List Selection]]&lt;br /&gt;
[[Category:ObjSel_Scripts]]&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=ListSelection2&amp;diff=6266</id>
		<title>ListSelection2</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=ListSelection2&amp;diff=6266"/>
		<updated>2013-03-14T10:49:30Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
Alternative script to [[List_Selection]] that will:&lt;br /&gt;
* list multiple residues once&lt;br /&gt;
* include water and hetatoms&lt;br /&gt;
* account for different chains/objects&lt;br /&gt;
* produce a screen/printed output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
listselection selection, [output=N/S/P, [HOH=Y/N ]]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
where:&lt;br /&gt;
* '''selection''' can be any existing or newly-defined selection&lt;br /&gt;
* '''output''' controls if the list is hidden (default), printed on screen (S) or saved in a file (P)&lt;br /&gt;
* '''HOH''' (default Y) allows to exclude (N) water residues from the list&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;listselection 1efa, output=P&lt;br /&gt;
Residues in '1efa': 1043&lt;br /&gt;
Results saved in listselection_1efa.txt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;listselection sele, output=S, HOH=N&lt;br /&gt;
Residues in 'sele, without HOH': 5&lt;br /&gt;
2P9H\A\101\ARG&lt;br /&gt;
2P9H\A\102\SER&lt;br /&gt;
2P9H\A\103\GLY&lt;br /&gt;
2P9H\A\104\VAL&lt;br /&gt;
2P9H\A\105\GLU&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;listselection 1efa and resn LEU, output=S&lt;br /&gt;
Residues in '1EFA and resn LEU': 108&lt;br /&gt;
1efa\A\6\LEU&lt;br /&gt;
1efa\A\45\LEU&lt;br /&gt;
[...]&lt;br /&gt;
1efa\C\323\LEU&lt;br /&gt;
1efa\C\330\LEU&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Code =&lt;br /&gt;
Copy the following text and save it as listselection.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from pymol import cmd, stored&lt;br /&gt;
 &lt;br /&gt;
def listselection (selection, output=&amp;quot;N&amp;quot;, HOH=&amp;quot;Y&amp;quot;):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;	&lt;br /&gt;
	usage: listselection selection, [output=N/S/P, [HOH=Y/N ]]&lt;br /&gt;
	&lt;br /&gt;
	More information at: PymolWiki: http://http://pymolwiki.org/index.php/ListSelection2&lt;br /&gt;
	AUTHOR: Pietro Gatti-Lafranconi, 2013&lt;br /&gt;
	Please inform me if you use/improve/like/dislike/publish with this script.&lt;br /&gt;
	CC BY-NC-SA&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	printedselection=&amp;quot;&amp;quot;&lt;br /&gt;
	extra=&amp;quot;&amp;quot;&lt;br /&gt;
	counter=0&lt;br /&gt;
	sel=selection&lt;br /&gt;
	objs=cmd.get_object_list(sel)&lt;br /&gt;
&lt;br /&gt;
	if HOH==&amp;quot;N&amp;quot;:&lt;br /&gt;
		sel=selection+&amp;quot; and not resn HOH&amp;quot;&lt;br /&gt;
		extra=&amp;quot;, without HOH&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	for a in range(len(objs)):&lt;br /&gt;
		m1=cmd.get_model(sel+&amp;quot; and &amp;quot;+objs[a])&lt;br /&gt;
		for x in range(len(m1.atom)):&lt;br /&gt;
			if m1.atom[x-1].resi!=m1.atom[x].resi:&lt;br /&gt;
				printedselection+=&amp;quot;%s\%s\%s\%s\n&amp;quot; % (objs[a], m1.atom[x].chain, m1.atom[x].resi, m1.atom[x].resn)&lt;br /&gt;
				counter+=1&lt;br /&gt;
				&lt;br /&gt;
	print &amp;quot;Residues in '%s%s': %s&amp;quot; % (selection, extra, counter)&lt;br /&gt;
	if output==&amp;quot;S&amp;quot;: print printedselection&lt;br /&gt;
	if output==&amp;quot;P&amp;quot;:&lt;br /&gt;
		f=open('listselection_'+selection+'.txt','w')&lt;br /&gt;
		f.write(&amp;quot;Residues in '%s%s': %s\n&amp;quot; % (selection, extra, counter))&lt;br /&gt;
		f.write(printedselection)&lt;br /&gt;
		f.close()&lt;br /&gt;
		print &amp;quot;Results saved in listselection_%s.txt&amp;quot; % selection&lt;br /&gt;
		&lt;br /&gt;
cmd.extend('listselection',listselection)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[Category:Script_Library|List Selection]]&lt;br /&gt;
[[Category:ObjSel_Scripts]]&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=ListSelection2&amp;diff=6265</id>
		<title>ListSelection2</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=ListSelection2&amp;diff=6265"/>
		<updated>2013-03-14T10:42:14Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: small code update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
Alternative script to [[List_Selection]] that will:&lt;br /&gt;
* list multiple residues once&lt;br /&gt;
* include water and hetatoms&lt;br /&gt;
* account for different chains/objects&lt;br /&gt;
* produce a screen/printed output&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
listselection selection, [output=N/S/P, [HOH=Y/N ]]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
where:&lt;br /&gt;
* '''selection''' can be any existing or newly-defined selection&lt;br /&gt;
* '''output''' controls if the list is hidden (default), printed on screen (S) or saved in a file (P)&lt;br /&gt;
* '''HOH''' (default Y) allows to exclude (N) water residues from the list&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Examples =&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;listselection 1efa, output=P&lt;br /&gt;
Residues in '1efa': 1043&lt;br /&gt;
Results saved in listselection_1efa.txt&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;listselection sele, output=S, HOH=N&lt;br /&gt;
Residues in 'sele, without HOH': 5&lt;br /&gt;
2P9H\A\101\ARG&lt;br /&gt;
2P9H\A\102\SER&lt;br /&gt;
2P9H\A\103\GLY&lt;br /&gt;
2P9H\A\104\VAL&lt;br /&gt;
2P9H\A\105\GLU&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
PyMOL&amp;gt;listselection 1efa and resn LEU, output=S&lt;br /&gt;
Residues in '1EFA and resn LEU': 108&lt;br /&gt;
1efa\A\6\LEU&lt;br /&gt;
1efa\A\45\LEU&lt;br /&gt;
[...]&lt;br /&gt;
1efa\C\323\LEU&lt;br /&gt;
1efa\C\330\LEU&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
= Code =&lt;br /&gt;
Copy the following text and save it as listselection.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from pymol import cmd, stored&lt;br /&gt;
 &lt;br /&gt;
def listselection (selection, output=&amp;quot;N&amp;quot;, HOH=&amp;quot;Y&amp;quot;):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;	&lt;br /&gt;
	usage: listselection selection, [output=N/S/P, [HOH=Y/N ]]&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	printedselection=&amp;quot;&amp;quot;&lt;br /&gt;
	extra=&amp;quot;&amp;quot;&lt;br /&gt;
	counter=0&lt;br /&gt;
	sel=selection&lt;br /&gt;
	objs=cmd.get_object_list(sel)&lt;br /&gt;
&lt;br /&gt;
	if HOH==&amp;quot;N&amp;quot;:&lt;br /&gt;
		sel=selection+&amp;quot; and not resn HOH&amp;quot;&lt;br /&gt;
		extra=&amp;quot;, without HOH&amp;quot;&lt;br /&gt;
	&lt;br /&gt;
	for a in range(len(objs)):&lt;br /&gt;
		m1=cmd.get_model(sel+&amp;quot; and &amp;quot;+objs[a])&lt;br /&gt;
		for x in range(len(m1.atom)):&lt;br /&gt;
			if m1.atom[x-1].resi!=m1.atom[x].resi:&lt;br /&gt;
				printedselection+=&amp;quot;%s\%s\%s\%s\n&amp;quot; % (objs[a], m1.atom[x].chain, m1.atom[x].resi, m1.atom[x].resn)&lt;br /&gt;
				counter+=1&lt;br /&gt;
				&lt;br /&gt;
	print &amp;quot;Residues in '%s%s': %s&amp;quot; % (selection, extra, counter)&lt;br /&gt;
	if output==&amp;quot;S&amp;quot;: print printedselection&lt;br /&gt;
	if output==&amp;quot;P&amp;quot;:&lt;br /&gt;
		f=open('listselection_'+selection+'.txt','w')&lt;br /&gt;
		f.write(&amp;quot;Residues in '%s%s': %s\n&amp;quot; % (selection, extra, counter))&lt;br /&gt;
		f.write(printedselection)&lt;br /&gt;
		f.close()&lt;br /&gt;
		print &amp;quot;Results saved in listselection_%s.txt&amp;quot; % selection&lt;br /&gt;
		&lt;br /&gt;
cmd.extend('listselection',listselection)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[Category:Script_Library|List Selection]]&lt;br /&gt;
[[Category:ObjSel_Scripts]]&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=ListSelection2&amp;diff=6264</id>
		<title>ListSelection2</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=ListSelection2&amp;diff=6264"/>
		<updated>2013-03-13T17:39:30Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: small script to list the content of pymol selections&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;= Overview =&lt;br /&gt;
Alternative script to [[List_Selection]] that will:&lt;br /&gt;
* list multiple residues once&lt;br /&gt;
* include water and hetatoms&lt;br /&gt;
* account for different chains/objects&lt;br /&gt;
* produce a screen/printed output&lt;br /&gt;
&lt;br /&gt;
= Usage =&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
listselection selection, [output=N/S/P, [HOH=Y/N ]]&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
= Code =&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
from pymol import cmd, stored&lt;br /&gt;
 &lt;br /&gt;
def listselection (selection, output=&amp;quot;N&amp;quot;, HOH=&amp;quot;Y&amp;quot;):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;	&lt;br /&gt;
	usage: listselection selection, [output=N/S/P, [HOH=Y/N ]]&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	printedselection=&amp;quot;&amp;quot;&lt;br /&gt;
	extra=&amp;quot;&amp;quot;&lt;br /&gt;
	counter=0&lt;br /&gt;
	sel=selection&lt;br /&gt;
	objs=cmd.get_object_list(sel)&lt;br /&gt;
&lt;br /&gt;
	if HOH==&amp;quot;N&amp;quot;:&lt;br /&gt;
		sel=selection+&amp;quot; and not resn HOH&amp;quot;&lt;br /&gt;
		extra=&amp;quot;, without HOH&amp;quot;&lt;br /&gt;
		&lt;br /&gt;
	for a in range(len(objs)):&lt;br /&gt;
		m1=cmd.get_model(sel+&amp;quot; and &amp;quot;+objs[a])&lt;br /&gt;
		for x in range(len(m1.atom)-1):&lt;br /&gt;
			if m1.atom[x].resi!=m1.atom[x+1].resi:&lt;br /&gt;
				printedselection+=&amp;quot;%s\%s\%s\%s\n&amp;quot; % (objs[a], m1.atom[x].chain, m1.atom[x].resi, m1.atom[x].resn)&lt;br /&gt;
				counter+=1&lt;br /&gt;
		&lt;br /&gt;
	print &amp;quot;Residues in '%s%s': %s&amp;quot; % (selection, extra, counter)&lt;br /&gt;
	if output==&amp;quot;S&amp;quot;: print printedselection&lt;br /&gt;
	if output==&amp;quot;P&amp;quot;:&lt;br /&gt;
		f=open('listselection_'+selection+'.txt','w')&lt;br /&gt;
		f.write(&amp;quot;Residues in '%s%s': %s\n&amp;quot; % (selection, extra, counter))&lt;br /&gt;
		f.write(printedselection)&lt;br /&gt;
		f.close()&lt;br /&gt;
		print &amp;quot;Results saved in listselection_%s.txt&amp;quot; % selection&lt;br /&gt;
		&lt;br /&gt;
cmd.extend('listselection',listselection)&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
[[Category:Script_Library|List Selection]]&lt;br /&gt;
[[Category:ObjSel_Scripts]]&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=DistancesRH&amp;diff=5422</id>
		<title>DistancesRH</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=DistancesRH&amp;diff=5422"/>
		<updated>2013-01-13T15:39:01Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox script-repo&lt;br /&gt;
|type      = script&lt;br /&gt;
|download  = &lt;br /&gt;
|author    = [[User:PietroGattiLafranconi|Pietro Gatti-Lafranconi]]&lt;br /&gt;
|license   = [http://creativecommons.org/licenses/by-nc-sa/3.0 CC BY-NC-SA]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Given an object, a reference amino acid and a radius, this scripts calculates pairwise distances between atom(s) in the reference and all atoms that fall within the given range.&lt;br /&gt;
&lt;br /&gt;
The script is intended to provide a range of useful tools while requiring minimal coding skills (i.e. it is not optimised for efficiency).&lt;br /&gt;
&lt;br /&gt;
By changing input parameters it is possible to:&lt;br /&gt;
* choose the output (none, on screen, on file)&lt;br /&gt;
* measure distances from one single atom&lt;br /&gt;
* display distance objects in pymol&lt;br /&gt;
* restrict distances between hydrogen-bond forming atoms only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The script also runs a number of controls to verify that inputs and outputs exists/are suitable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
 distancesRH obj, ref, dist, [chain, [output S/P/N, [show Y/N, [Hbonds Y/N, [aname]]]]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Required Arguments ==&lt;br /&gt;
* '''obj''' = object name&lt;br /&gt;
* '''ref''' = reference amino acid id&lt;br /&gt;
* '''dist''' = radius in Angstroms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Optional Arguments ==&lt;br /&gt;
* ''chain'' = selected chain&lt;br /&gt;
* ''output'' = accepts S (screen), P (print) or N (none), default=S&lt;br /&gt;
* ''show'' = shows distances in pymol window, default=N&lt;br /&gt;
* ''Hbonds'' = restricts results to atoms that can form Hbonds, default=N&lt;br /&gt;
* ''aname'' = selects a specific atom in reference object and to calculate distances from one individual atom&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
'''example #1'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
distancesRH 2WHH, 25, 3.2, show=Y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Will show distances between all atoms of residue 25 in 2WHH and any atom within 3.2 Å and return the result on screen (figure 1, left).&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
distancesRH 2WHH, 25, 3.2, show=Y, aname=OD1, output=P&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Same result as before, but only distances from atom OD1 are measured and shown. Results will be printed in 'distancesRH_25-OD1.txt' (figure 1, right).&lt;br /&gt;
&lt;br /&gt;
[[File:distancesRH_ex1.png|450px|example #1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''example #2'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
distancesRH 1EFA, 901, 3.5, show=Y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Will show distances between all atoms in resi 901 of 1EFA and all atoms within 3.5 Å (figure 2, left).&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
distancesRH 1EFA, 901, 3.5, show=Y, Hbonds=Y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Distances will now be calculated between atoms that can form H bonds only (figure 2, right).&lt;br /&gt;
&lt;br /&gt;
[[File:distancesRH_ex2.png|450px|example #2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''example #3'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
distancesRH 1EFA, 18, 4.7, chain=B, show=Y, aname=NE2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Distances between atom NE2 of residue 19 in chain B of 1EFA and all atoms within 4.7 Å (all of which are in the DNA fragment of chain D, figure 3).&lt;br /&gt;
&lt;br /&gt;
[[File:distancesRH_ex3.png|300px|example #3]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Notes, Further Developments and Requests ==&lt;br /&gt;
* This script works with visible objects (handling of multiple states will hopefully be implemented soon)&lt;br /&gt;
* As it is intended to be user-friendly more than fast, this script is not suitable to calculate distances between large objects. Use [[Quick_dist]] instead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
* '''11/01/2013''' - edit #1: ''distances measured between different chains''&lt;br /&gt;
* '''13/01/2013''' - edit #2: ''print output optimsed''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Code ==&lt;br /&gt;
&lt;br /&gt;
Copy the following text and save it as distancesRH.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
Given an object, a reference amino acid and a radius, this scripts calculates pairwise&lt;br /&gt;
distances between all atoms in the reference and all atoms that fall within the given range.&lt;br /&gt;
Distances are either returned on screen (default) or printed on file.&lt;br /&gt;
Distances can be calculated from a single atom only.&lt;br /&gt;
Optionally, only atoms that can form H-bonds can be returned (but check distances!)&lt;br /&gt;
&lt;br /&gt;
More information at: PymolWiki&lt;br /&gt;
http://pymolwiki.org/index.php/DistancesRH&lt;br /&gt;
&lt;br /&gt;
AUTHOR&lt;br /&gt;
Pietro Gatti-Lafranconi, 2012&lt;br /&gt;
Please inform me if you use/improve/like/dislike/publish with this script.&lt;br /&gt;
CC BY-NC-SA&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
from pymol import cmd, stored, math&lt;br /&gt;
	&lt;br /&gt;
def distancesRH (obj, ref, dist, chain=0, output=&amp;quot;S&amp;quot;, show=&amp;quot;N&amp;quot;, Hbonds=&amp;quot;N&amp;quot;, aname=&amp;quot;*&amp;quot;):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;	&lt;br /&gt;
	usage: distancesRH obj, ref, dist, [chain, [output S/P/N, [show Y/N, [Hbonds Y/N, [aname]]]]]&lt;br /&gt;
	&lt;br /&gt;
	obj: object name, ref:reference aa, dist: radius in A, chain: selected chain&lt;br /&gt;
	output: accepts S (screen), P (print) or N (none), default=S&lt;br /&gt;
	show: shows distances in pymol window, default=N&lt;br /&gt;
	Hbonds: restricts results to atoms that can form Hbonds, default=N&lt;br /&gt;
	aname: name of a specific atom in ref (to calculate distances from one atom only)&lt;br /&gt;
		&lt;br /&gt;
	example: distancesRH 2WHH, 25, 3.2, [B, [S, [N, [Y, [CB]]]]]&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	print &amp;quot;&amp;quot;&lt;br /&gt;
	#delete previous selections and displayed distances&lt;br /&gt;
	cmd.delete (&amp;quot;dist*&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Atoms&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Residues&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Reference&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Hbonds&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;RefAtom&amp;quot;)&lt;br /&gt;
	#creates and names selections	&lt;br /&gt;
	if chain==0: cen=obj&lt;br /&gt;
	else: cen=obj+&amp;quot; and chain &amp;quot;+chain&lt;br /&gt;
	refA=&amp;quot; and resi &amp;quot;+ref+&amp;quot; and name &amp;quot;+aname&lt;br /&gt;
	cmd.select(&amp;quot;Reference&amp;quot;, &amp;quot;byres &amp;quot;+cen+refA)&lt;br /&gt;
	m1=cmd.get_model (&amp;quot;Reference&amp;quot;)&lt;br /&gt;
	if aname!=&amp;quot;*&amp;quot;:&lt;br /&gt;
		cmd.select(&amp;quot;RefAtom&amp;quot;, cen+refA)&lt;br /&gt;
		m1=cmd.get_model (&amp;quot;RefAtom&amp;quot;)&lt;br /&gt;
	cmd.select(&amp;quot;Atoms&amp;quot;, cen+refA+&amp;quot; around &amp;quot;+str(dist)+&amp;quot; and not resi &amp;quot;+ref+&amp;quot; and &amp;quot;+obj)&lt;br /&gt;
	cmd.show(&amp;quot;nb_spheres&amp;quot;, &amp;quot;(Atoms or Reference) and (resn HOH or HET)&amp;quot;)&lt;br /&gt;
	cmd.select(&amp;quot;Residues&amp;quot;, &amp;quot;byres Atoms&amp;quot;)&lt;br /&gt;
	m2=cmd.get_model(&amp;quot;Atoms and visible&amp;quot;)	&lt;br /&gt;
	if Hbonds==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		cmd.select(&amp;quot;__Hbonds1&amp;quot;, &amp;quot;Reference and not symbol c&amp;quot;)&lt;br /&gt;
		if aname!=&amp;quot;*&amp;quot;:&lt;br /&gt;
			cmd.select(&amp;quot;__Hbonds1&amp;quot;, &amp;quot;RefAtom and not symbol c&amp;quot;)&lt;br /&gt;
		cmd.select(&amp;quot;__Hbonds2&amp;quot;, &amp;quot;Atoms and not symbol c&amp;quot;)&lt;br /&gt;
		cmd.select(&amp;quot;Hbonds&amp;quot;, &amp;quot;__Hbonds1 or __Hbonds2&amp;quot;)&lt;br /&gt;
		cmd.show(&amp;quot;lines&amp;quot;, &amp;quot;Hbonds&amp;quot;)&lt;br /&gt;
		m1=cmd.get_model (&amp;quot;__Hbonds1&amp;quot;)&lt;br /&gt;
		m2=cmd.get_model (&amp;quot;__Hbonds2 and visible&amp;quot;)	&lt;br /&gt;
	&lt;br /&gt;
	#controllers	&lt;br /&gt;
	if (not (output==&amp;quot;S&amp;quot; or output==&amp;quot;N&amp;quot; or output==&amp;quot;P&amp;quot;)) or (not (show==&amp;quot;Y&amp;quot; or show==&amp;quot;N&amp;quot;)) or (not (Hbonds==&amp;quot;Y&amp;quot; or Hbonds==&amp;quot;N&amp;quot;)):&lt;br /&gt;
		print &amp;quot;Malformed input, please try again&amp;quot;&lt;br /&gt;
		return&lt;br /&gt;
	abort=1&lt;br /&gt;
	abort2=0&lt;br /&gt;
	mc=cmd.get_model(cen)&lt;br /&gt;
	for c0 in range(len(mc.atom)):&lt;br /&gt;
		if mc.atom[c0].resi==ref: abort=0&lt;br /&gt;
	mc2=cmd.get_model(cen+refA)&lt;br /&gt;
	if aname!=&amp;quot;*&amp;quot;:&lt;br /&gt;
		abort2=1&lt;br /&gt;
		for c00 in range (len(mc2.atom)):	&lt;br /&gt;
			if mc2.atom[c00].name==aname: abort2=0&lt;br /&gt;
	if Hbonds==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		if aname[0]==&amp;quot;C&amp;quot;:&lt;br /&gt;
			print &amp;quot;Warning: no atoms in the selection can form H-bonds&amp;quot;&lt;br /&gt;
			return&lt;br /&gt;
	if abort==1: print &amp;quot;Warning: no such residue in the reference object&amp;quot;&lt;br /&gt;
	if abort2==1: &lt;br /&gt;
		if abort==0: print &amp;quot;Warning: no such atom in the reference object&amp;quot;&lt;br /&gt;
	if abort==1 or abort2==1: return&lt;br /&gt;
&lt;br /&gt;
	#measures distances&lt;br /&gt;
	distance2=[]&lt;br /&gt;
	distances=[]&lt;br /&gt;
	screenOP=&amp;quot;&amp;quot;	&lt;br /&gt;
	fileOP=&amp;quot;&amp;quot;&lt;br /&gt;
	for c1 in range(len(m1.atom)):&lt;br /&gt;
		for c2 in range(len(m2.atom)):&lt;br /&gt;
			if math.sqrt(sum(map(lambda f: (f[0]-f[1])**2, zip(m1.atom[c1].coord,m2.atom[c2].coord))))&amp;lt;float(dist):&lt;br /&gt;
				distance=cmd.distance (obj+&amp;quot;//&amp;quot;+m1.atom[c1].chain+&amp;quot;/&amp;quot;+m1.atom[c1].resi+&amp;quot;/&amp;quot;+m1.atom[c1].name, obj+&amp;quot;//&amp;quot;+m2.atom[c2].chain+&amp;quot;/&amp;quot;+m2.atom[c2].resi+&amp;quot;/&amp;quot;+m2.atom[c2].name)&lt;br /&gt;
				distances.append(distance)&lt;br /&gt;
				screenOP+=&amp;quot;%s/%s/%s/%s to %s/%s/%s/%s: %.3f\n&amp;quot; % (m1.atom[c1].chain,m1.atom[c1].resn,m1.atom[c1].resi,m1.atom[c1].name,m2.atom[c2].chain,m2.atom[c2].resn,m2.atom[c2].resi,m2.atom[c2].name, distance)&lt;br /&gt;
				fileOP+=&amp;quot;%s/%s/%s/%s\t\t\t%s/%s/%s/%s\t\t\t\t%.5f\n&amp;quot;%  (m1.atom[c1].chain,m1.atom[c1].resn,m1.atom[c1].resi,m1.atom[c1].name,m2.atom[c2].chain,m2.atom[c2].resn,m2.atom[c2].resi,m2.atom[c2].name, distance)	&lt;br /&gt;
	#last controller&lt;br /&gt;
	if len(distances)==0:&lt;br /&gt;
		if abort2==0:&lt;br /&gt;
			print &amp;quot;Warning: no atoms within the selected range&amp;quot;&lt;br /&gt;
		return&lt;br /&gt;
&lt;br /&gt;
	#data outputs&lt;br /&gt;
	if output==&amp;quot;N&amp;quot;: print &amp;quot;Data recorded, but not printed&amp;quot;&lt;br /&gt;
	if output==&amp;quot;S&amp;quot;:&lt;br /&gt;
		print &amp;quot;Distance of atoms in &amp;quot;+obj+&amp;quot;/&amp;quot;+ref+&amp;quot;/&amp;quot;+aname+&amp;quot; to all atoms within &amp;quot;+dist+&amp;quot; Angstroms&amp;quot;&lt;br /&gt;
		if Hbonds==&amp;quot;Y&amp;quot;: print &amp;quot;Distances restricted to potential H-bond pairs&amp;quot;&lt;br /&gt;
		print screenOP	&lt;br /&gt;
	if output==&amp;quot;P&amp;quot;:&lt;br /&gt;
		if aname==&amp;quot;*&amp;quot;: aname=&amp;quot;ALL&amp;quot;&lt;br /&gt;
		print 'data printed in &amp;quot;distances_rH_'+ref+'-'+aname+'.txt&amp;quot; file'&lt;br /&gt;
		f=open('distances_rH_'+ref+'-'+aname+'.txt','w')&lt;br /&gt;
		f.write(&amp;quot;Pairwise distances betweet atoms in %s and all atoms within %s Angstroms\n&amp;quot; % (obj+&amp;quot;/&amp;quot;+ref+&amp;quot;/&amp;quot;+aname, dist))&lt;br /&gt;
		if Hbonds==&amp;quot;Y&amp;quot;: f.write(&amp;quot;Distances restricted to potential H-bond pairs\n&amp;quot;)&lt;br /&gt;
		f.write(&amp;quot;Atom in reference\tAtom in destination\t\tdistance\n&amp;quot;)&lt;br /&gt;
		f.write(fileOP)&lt;br /&gt;
		f.close()&lt;br /&gt;
	print &amp;quot;All done! Good luck with your data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	#graphical output&lt;br /&gt;
	if show==&amp;quot;N&amp;quot;: cmd.delete (&amp;quot;dist*&amp;quot;)&lt;br /&gt;
	if show==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		cmd.show(&amp;quot;lines&amp;quot;, &amp;quot;Reference&amp;quot;)&lt;br /&gt;
		cmd.show(&amp;quot;lines&amp;quot;, &amp;quot;Residues&amp;quot;)&lt;br /&gt;
				&lt;br /&gt;
cmd.extend(&amp;quot;distancesRH&amp;quot;, distancesRH);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Script_Library]]&lt;br /&gt;
[[Category:ObjSel_Scripts]]&lt;br /&gt;
[[Category:Biochemical_Scripts]]&lt;br /&gt;
[[Category:Structural_Biology_Scripts]]&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=DistancesRH&amp;diff=5421</id>
		<title>DistancesRH</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=DistancesRH&amp;diff=5421"/>
		<updated>2013-01-13T15:38:17Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: graphical outputs&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox script-repo&lt;br /&gt;
|type      = script&lt;br /&gt;
|download  = &lt;br /&gt;
|author    = [[User:PietroGattiLafranconi|Pietro Gatti-Lafranconi]]&lt;br /&gt;
|license   = [http://creativecommons.org/licenses/by-nc-sa/3.0 CC BY-NC-SA]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Given an object, a reference amino acid and a radius, this scripts calculates pairwise distances between atom(s) in the reference and all atoms that fall within the given range.&lt;br /&gt;
&lt;br /&gt;
The script is intended to provide a range of useful tools while requiring minimal coding skills (i.e. it is not optimised for efficiency).&lt;br /&gt;
&lt;br /&gt;
By changing input parameters it is possible to:&lt;br /&gt;
* choose the output (none, on screen, on file)&lt;br /&gt;
* measure distances from one single atom&lt;br /&gt;
* display distance objects in pymol&lt;br /&gt;
* restrict distances between hydrogen-bond forming atoms only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The script also runs a number of controls to verify that inputs and outputs exists/are suitable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
 distancesRH obj, ref, dist, [chain, [output S/P/N, [show Y/N, [Hbonds Y/N, [aname]]]]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Required Arguments ==&lt;br /&gt;
* '''obj''' = object name&lt;br /&gt;
* '''ref''' = reference amino acid id&lt;br /&gt;
* '''dist''' = radius in Angstroms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Optional Arguments ==&lt;br /&gt;
* ''chain'' = selected chain&lt;br /&gt;
* ''output'' = accepts S (screen), P (print) or N (none), default=S&lt;br /&gt;
* ''show'' = shows distances in pymol window, default=N&lt;br /&gt;
* ''Hbonds'' = restricts results to atoms that can form Hbonds, default=N&lt;br /&gt;
* ''aname'' = selects a specific atom in reference object and to calculate distances from one individual atom&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
'''example #1'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
distancesRH 2WHH, 25, 3.2, show=Y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Will show distances between all atoms of residue 25 in 2WHH and any atom within 3.2 Å and return the result on screen (figure 1, left).&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
distancesRH 2WHH, 25, 3.2, show=Y, aname=OD1, output=P&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Same result as before, but only distances from atom OD1 are measured and shown. Results will be printed in 'distancesRH_25-OD1.txt' (figure 1, right).&lt;br /&gt;
&lt;br /&gt;
[[File:distancesRH_ex1.png|450px|example #1]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''example #2'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
distancesRH 1EFA, 901, 3.5, show=Y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Will show distances between all atoms in resi 901 of 1EFA and all atoms within 3.5 Å (figure 2, left).&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
distancesRH 1EFA, 901, 3.5, show=Y, Hbonds=Y&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Distances will now be calculated between atoms that can form H bonds only (figure 2, right).&lt;br /&gt;
&lt;br /&gt;
[[File:distancesRH_ex2.png|300px|example #2]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
'''example #3'''&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
distancesRH 1EFA, 18, 4.7, chain=B, show=Y, aname=NE2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Distances between atom NE2 of residue 19 in chain B of 1EFA and all atoms within 4.7 Å (all of which are in the DNA fragment of chain D, figure 3).&lt;br /&gt;
&lt;br /&gt;
[[File:distancesRH_ex3.png|450px|example #3]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Notes, Further Developments and Requests ==&lt;br /&gt;
* This script works with visible objects (handling of multiple states will hopefully be implemented soon)&lt;br /&gt;
* As it is intended to be user-friendly more than fast, this script is not suitable to calculate distances between large objects. Use [[Quick_dist]] instead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
* '''11/01/2013''' - edit #1: ''distances measured between different chains''&lt;br /&gt;
* '''13/01/2013''' - edit #2: ''print output optimsed''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Code ==&lt;br /&gt;
&lt;br /&gt;
Copy the following text and save it as distancesRH.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
Given an object, a reference amino acid and a radius, this scripts calculates pairwise&lt;br /&gt;
distances between all atoms in the reference and all atoms that fall within the given range.&lt;br /&gt;
Distances are either returned on screen (default) or printed on file.&lt;br /&gt;
Distances can be calculated from a single atom only.&lt;br /&gt;
Optionally, only atoms that can form H-bonds can be returned (but check distances!)&lt;br /&gt;
&lt;br /&gt;
More information at: PymolWiki&lt;br /&gt;
http://pymolwiki.org/index.php/DistancesRH&lt;br /&gt;
&lt;br /&gt;
AUTHOR&lt;br /&gt;
Pietro Gatti-Lafranconi, 2012&lt;br /&gt;
Please inform me if you use/improve/like/dislike/publish with this script.&lt;br /&gt;
CC BY-NC-SA&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
from pymol import cmd, stored, math&lt;br /&gt;
	&lt;br /&gt;
def distancesRH (obj, ref, dist, chain=0, output=&amp;quot;S&amp;quot;, show=&amp;quot;N&amp;quot;, Hbonds=&amp;quot;N&amp;quot;, aname=&amp;quot;*&amp;quot;):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;	&lt;br /&gt;
	usage: distancesRH obj, ref, dist, [chain, [output S/P/N, [show Y/N, [Hbonds Y/N, [aname]]]]]&lt;br /&gt;
	&lt;br /&gt;
	obj: object name, ref:reference aa, dist: radius in A, chain: selected chain&lt;br /&gt;
	output: accepts S (screen), P (print) or N (none), default=S&lt;br /&gt;
	show: shows distances in pymol window, default=N&lt;br /&gt;
	Hbonds: restricts results to atoms that can form Hbonds, default=N&lt;br /&gt;
	aname: name of a specific atom in ref (to calculate distances from one atom only)&lt;br /&gt;
		&lt;br /&gt;
	example: distancesRH 2WHH, 25, 3.2, [B, [S, [N, [Y, [CB]]]]]&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	print &amp;quot;&amp;quot;&lt;br /&gt;
	#delete previous selections and displayed distances&lt;br /&gt;
	cmd.delete (&amp;quot;dist*&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Atoms&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Residues&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Reference&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Hbonds&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;RefAtom&amp;quot;)&lt;br /&gt;
	#creates and names selections	&lt;br /&gt;
	if chain==0: cen=obj&lt;br /&gt;
	else: cen=obj+&amp;quot; and chain &amp;quot;+chain&lt;br /&gt;
	refA=&amp;quot; and resi &amp;quot;+ref+&amp;quot; and name &amp;quot;+aname&lt;br /&gt;
	cmd.select(&amp;quot;Reference&amp;quot;, &amp;quot;byres &amp;quot;+cen+refA)&lt;br /&gt;
	m1=cmd.get_model (&amp;quot;Reference&amp;quot;)&lt;br /&gt;
	if aname!=&amp;quot;*&amp;quot;:&lt;br /&gt;
		cmd.select(&amp;quot;RefAtom&amp;quot;, cen+refA)&lt;br /&gt;
		m1=cmd.get_model (&amp;quot;RefAtom&amp;quot;)&lt;br /&gt;
	cmd.select(&amp;quot;Atoms&amp;quot;, cen+refA+&amp;quot; around &amp;quot;+str(dist)+&amp;quot; and not resi &amp;quot;+ref+&amp;quot; and &amp;quot;+obj)&lt;br /&gt;
	cmd.show(&amp;quot;nb_spheres&amp;quot;, &amp;quot;(Atoms or Reference) and (resn HOH or HET)&amp;quot;)&lt;br /&gt;
	cmd.select(&amp;quot;Residues&amp;quot;, &amp;quot;byres Atoms&amp;quot;)&lt;br /&gt;
	m2=cmd.get_model(&amp;quot;Atoms and visible&amp;quot;)	&lt;br /&gt;
	if Hbonds==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		cmd.select(&amp;quot;__Hbonds1&amp;quot;, &amp;quot;Reference and not symbol c&amp;quot;)&lt;br /&gt;
		if aname!=&amp;quot;*&amp;quot;:&lt;br /&gt;
			cmd.select(&amp;quot;__Hbonds1&amp;quot;, &amp;quot;RefAtom and not symbol c&amp;quot;)&lt;br /&gt;
		cmd.select(&amp;quot;__Hbonds2&amp;quot;, &amp;quot;Atoms and not symbol c&amp;quot;)&lt;br /&gt;
		cmd.select(&amp;quot;Hbonds&amp;quot;, &amp;quot;__Hbonds1 or __Hbonds2&amp;quot;)&lt;br /&gt;
		cmd.show(&amp;quot;lines&amp;quot;, &amp;quot;Hbonds&amp;quot;)&lt;br /&gt;
		m1=cmd.get_model (&amp;quot;__Hbonds1&amp;quot;)&lt;br /&gt;
		m2=cmd.get_model (&amp;quot;__Hbonds2 and visible&amp;quot;)	&lt;br /&gt;
	&lt;br /&gt;
	#controllers	&lt;br /&gt;
	if (not (output==&amp;quot;S&amp;quot; or output==&amp;quot;N&amp;quot; or output==&amp;quot;P&amp;quot;)) or (not (show==&amp;quot;Y&amp;quot; or show==&amp;quot;N&amp;quot;)) or (not (Hbonds==&amp;quot;Y&amp;quot; or Hbonds==&amp;quot;N&amp;quot;)):&lt;br /&gt;
		print &amp;quot;Malformed input, please try again&amp;quot;&lt;br /&gt;
		return&lt;br /&gt;
	abort=1&lt;br /&gt;
	abort2=0&lt;br /&gt;
	mc=cmd.get_model(cen)&lt;br /&gt;
	for c0 in range(len(mc.atom)):&lt;br /&gt;
		if mc.atom[c0].resi==ref: abort=0&lt;br /&gt;
	mc2=cmd.get_model(cen+refA)&lt;br /&gt;
	if aname!=&amp;quot;*&amp;quot;:&lt;br /&gt;
		abort2=1&lt;br /&gt;
		for c00 in range (len(mc2.atom)):	&lt;br /&gt;
			if mc2.atom[c00].name==aname: abort2=0&lt;br /&gt;
	if Hbonds==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		if aname[0]==&amp;quot;C&amp;quot;:&lt;br /&gt;
			print &amp;quot;Warning: no atoms in the selection can form H-bonds&amp;quot;&lt;br /&gt;
			return&lt;br /&gt;
	if abort==1: print &amp;quot;Warning: no such residue in the reference object&amp;quot;&lt;br /&gt;
	if abort2==1: &lt;br /&gt;
		if abort==0: print &amp;quot;Warning: no such atom in the reference object&amp;quot;&lt;br /&gt;
	if abort==1 or abort2==1: return&lt;br /&gt;
&lt;br /&gt;
	#measures distances&lt;br /&gt;
	distance2=[]&lt;br /&gt;
	distances=[]&lt;br /&gt;
	screenOP=&amp;quot;&amp;quot;	&lt;br /&gt;
	fileOP=&amp;quot;&amp;quot;&lt;br /&gt;
	for c1 in range(len(m1.atom)):&lt;br /&gt;
		for c2 in range(len(m2.atom)):&lt;br /&gt;
			if math.sqrt(sum(map(lambda f: (f[0]-f[1])**2, zip(m1.atom[c1].coord,m2.atom[c2].coord))))&amp;lt;float(dist):&lt;br /&gt;
				distance=cmd.distance (obj+&amp;quot;//&amp;quot;+m1.atom[c1].chain+&amp;quot;/&amp;quot;+m1.atom[c1].resi+&amp;quot;/&amp;quot;+m1.atom[c1].name, obj+&amp;quot;//&amp;quot;+m2.atom[c2].chain+&amp;quot;/&amp;quot;+m2.atom[c2].resi+&amp;quot;/&amp;quot;+m2.atom[c2].name)&lt;br /&gt;
				distances.append(distance)&lt;br /&gt;
				screenOP+=&amp;quot;%s/%s/%s/%s to %s/%s/%s/%s: %.3f\n&amp;quot; % (m1.atom[c1].chain,m1.atom[c1].resn,m1.atom[c1].resi,m1.atom[c1].name,m2.atom[c2].chain,m2.atom[c2].resn,m2.atom[c2].resi,m2.atom[c2].name, distance)&lt;br /&gt;
				fileOP+=&amp;quot;%s/%s/%s/%s\t\t\t%s/%s/%s/%s\t\t\t\t%.5f\n&amp;quot;%  (m1.atom[c1].chain,m1.atom[c1].resn,m1.atom[c1].resi,m1.atom[c1].name,m2.atom[c2].chain,m2.atom[c2].resn,m2.atom[c2].resi,m2.atom[c2].name, distance)	&lt;br /&gt;
	#last controller&lt;br /&gt;
	if len(distances)==0:&lt;br /&gt;
		if abort2==0:&lt;br /&gt;
			print &amp;quot;Warning: no atoms within the selected range&amp;quot;&lt;br /&gt;
		return&lt;br /&gt;
&lt;br /&gt;
	#data outputs&lt;br /&gt;
	if output==&amp;quot;N&amp;quot;: print &amp;quot;Data recorded, but not printed&amp;quot;&lt;br /&gt;
	if output==&amp;quot;S&amp;quot;:&lt;br /&gt;
		print &amp;quot;Distance of atoms in &amp;quot;+obj+&amp;quot;/&amp;quot;+ref+&amp;quot;/&amp;quot;+aname+&amp;quot; to all atoms within &amp;quot;+dist+&amp;quot; Angstroms&amp;quot;&lt;br /&gt;
		if Hbonds==&amp;quot;Y&amp;quot;: print &amp;quot;Distances restricted to potential H-bond pairs&amp;quot;&lt;br /&gt;
		print screenOP	&lt;br /&gt;
	if output==&amp;quot;P&amp;quot;:&lt;br /&gt;
		if aname==&amp;quot;*&amp;quot;: aname=&amp;quot;ALL&amp;quot;&lt;br /&gt;
		print 'data printed in &amp;quot;distances_rH_'+ref+'-'+aname+'.txt&amp;quot; file'&lt;br /&gt;
		f=open('distances_rH_'+ref+'-'+aname+'.txt','w')&lt;br /&gt;
		f.write(&amp;quot;Pairwise distances betweet atoms in %s and all atoms within %s Angstroms\n&amp;quot; % (obj+&amp;quot;/&amp;quot;+ref+&amp;quot;/&amp;quot;+aname, dist))&lt;br /&gt;
		if Hbonds==&amp;quot;Y&amp;quot;: f.write(&amp;quot;Distances restricted to potential H-bond pairs\n&amp;quot;)&lt;br /&gt;
		f.write(&amp;quot;Atom in reference\tAtom in destination\t\tdistance\n&amp;quot;)&lt;br /&gt;
		f.write(fileOP)&lt;br /&gt;
		f.close()&lt;br /&gt;
	print &amp;quot;All done! Good luck with your data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	#graphical output&lt;br /&gt;
	if show==&amp;quot;N&amp;quot;: cmd.delete (&amp;quot;dist*&amp;quot;)&lt;br /&gt;
	if show==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		cmd.show(&amp;quot;lines&amp;quot;, &amp;quot;Reference&amp;quot;)&lt;br /&gt;
		cmd.show(&amp;quot;lines&amp;quot;, &amp;quot;Residues&amp;quot;)&lt;br /&gt;
				&lt;br /&gt;
cmd.extend(&amp;quot;distancesRH&amp;quot;, distancesRH);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Script_Library]]&lt;br /&gt;
[[Category:ObjSel_Scripts]]&lt;br /&gt;
[[Category:Biochemical_Scripts]]&lt;br /&gt;
[[Category:Structural_Biology_Scripts]]&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=File:DistancesRH_ex3.png&amp;diff=1782</id>
		<title>File:DistancesRH ex3.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=File:DistancesRH_ex3.png&amp;diff=1782"/>
		<updated>2013-01-13T15:17:12Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=File:DistancesRH_ex2.png&amp;diff=1540</id>
		<title>File:DistancesRH ex2.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=File:DistancesRH_ex2.png&amp;diff=1540"/>
		<updated>2013-01-13T15:16:59Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=File:DistancesRH_ex1.png&amp;diff=1293</id>
		<title>File:DistancesRH ex1.png</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=File:DistancesRH_ex1.png&amp;diff=1293"/>
		<updated>2013-01-13T15:16:35Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=DistancesRH&amp;diff=5420</id>
		<title>DistancesRH</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=DistancesRH&amp;diff=5420"/>
		<updated>2013-01-13T15:15:35Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: code update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox script-repo&lt;br /&gt;
|type      = script&lt;br /&gt;
|download  = &lt;br /&gt;
|author    = [[User:PietroGattiLafranconi|Pietro Gatti-Lafranconi]]&lt;br /&gt;
|license   = [http://creativecommons.org/licenses/by-nc-sa/3.0 CC BY-NC-SA]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Given an object, a reference amino acid and a radius, this scripts calculates pairwise distances between atom(s) in the reference and all atoms that fall within the given range.&lt;br /&gt;
&lt;br /&gt;
The script is intended to provide a range of useful tools while requiring minimal coding skills (i.e. it is not optimised for efficiency).&lt;br /&gt;
&lt;br /&gt;
By changing input parameters it is possible to:&lt;br /&gt;
* choose the output (none, on screen, on file)&lt;br /&gt;
* measure distances from one single atom&lt;br /&gt;
* display distance objects in pymol&lt;br /&gt;
* restrict distances between hydrogen-bond forming atoms only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The script also runs a number of controls to verify that inputs and outputs exists/are suitable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
 distancesRH obj, ref, dist, [chain, [output S/P/N, [show Y/N, [Hbonds Y/N, [aname]]]]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Required Arguments ==&lt;br /&gt;
* '''obj''' = object name&lt;br /&gt;
* '''ref''' = reference amino acid id&lt;br /&gt;
* '''dist''' = radius in Angstroms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Optional Arguments ==&lt;br /&gt;
* ''chain'' = selected chain&lt;br /&gt;
* ''output'' = accepts S (screen), P (print) or N (none), default=S&lt;br /&gt;
* ''show'' = shows distances in pymol window, default=N&lt;br /&gt;
* ''Hbonds'' = restricts results to atoms that can form Hbonds, default=N&lt;br /&gt;
* ''aname'' = selects a specific atom in reference object and to calculate distances from one individual atom&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
example #1&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
distancesRH 2WHH, 25, 3.2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Will show distances between all atoms of residue 25 in 2WHH and any atom within 3.2 Å and return the result on screen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
example #2&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
distancesRH 1LVM, 151, 3, B, P, Y, Y, N&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Will show distances between N of residue 151 in chain B of 1LVM and all atoms within 3 Å. Distances are limited to atoms that can form hydrogen bonds and will be printed in &amp;quot;dist_rH_151_N.txt&amp;quot;. Dist objects will be shown in pymol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Notes, Further Developments and Requests ==&lt;br /&gt;
* This script works with visible objects (handling of multiple states will hopefully be implemented soon)&lt;br /&gt;
* As it is intended to be user-friendly more than fast, this script is not suitable to calculate distances between large objects. Use [[Quick_dist]] instead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
* '''11/01/2013''' - edit #1: ''distances measured between different chains''&lt;br /&gt;
* '''13/01/2013''' - edit #2: ''print output optimsed''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Code ==&lt;br /&gt;
&lt;br /&gt;
Copy the following text and save it as distancesRH.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
Given an object, a reference amino acid and a radius, this scripts calculates pairwise&lt;br /&gt;
distances between all atoms in the reference and all atoms that fall within the given range.&lt;br /&gt;
Distances are either returned on screen (default) or printed on file.&lt;br /&gt;
Distances can be calculated from a single atom only.&lt;br /&gt;
Optionally, only atoms that can form H-bonds can be returned (but check distances!)&lt;br /&gt;
&lt;br /&gt;
More information at: PymolWiki&lt;br /&gt;
http://pymolwiki.org/index.php/DistancesRH&lt;br /&gt;
&lt;br /&gt;
AUTHOR&lt;br /&gt;
Pietro Gatti-Lafranconi, 2012&lt;br /&gt;
Please inform me if you use/improve/like/dislike/publish with this script.&lt;br /&gt;
CC BY-NC-SA&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
from pymol import cmd, stored, math&lt;br /&gt;
	&lt;br /&gt;
def distancesRH (obj, ref, dist, chain=0, output=&amp;quot;S&amp;quot;, show=&amp;quot;N&amp;quot;, Hbonds=&amp;quot;N&amp;quot;, aname=&amp;quot;*&amp;quot;):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;	&lt;br /&gt;
	usage: distancesRH obj, ref, dist, [chain, [output S/P/N, [show Y/N, [Hbonds Y/N, [aname]]]]]&lt;br /&gt;
	&lt;br /&gt;
	obj: object name, ref:reference aa, dist: radius in A, chain: selected chain&lt;br /&gt;
	output: accepts S (screen), P (print) or N (none), default=S&lt;br /&gt;
	show: shows distances in pymol window, default=N&lt;br /&gt;
	Hbonds: restricts results to atoms that can form Hbonds, default=N&lt;br /&gt;
	aname: name of a specific atom in ref (to calculate distances from one atom only)&lt;br /&gt;
		&lt;br /&gt;
	example: distancesRH 2WHH, 25, 3.2, [B, [S, [N, [Y, [CB]]]]]&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	print &amp;quot;&amp;quot;&lt;br /&gt;
	#delete previous selections and displayed distances&lt;br /&gt;
	cmd.delete (&amp;quot;dist*&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Atoms&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Residues&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Reference&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Hbonds&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;RefAtom&amp;quot;)&lt;br /&gt;
	#creates and names selections	&lt;br /&gt;
	if chain==0: cen=obj&lt;br /&gt;
	else: cen=obj+&amp;quot; and chain &amp;quot;+chain&lt;br /&gt;
	refA=&amp;quot; and resi &amp;quot;+ref+&amp;quot; and name &amp;quot;+aname&lt;br /&gt;
	cmd.select(&amp;quot;Reference&amp;quot;, &amp;quot;byres &amp;quot;+cen+refA)&lt;br /&gt;
	m1=cmd.get_model (&amp;quot;Reference&amp;quot;)&lt;br /&gt;
	if aname!=&amp;quot;*&amp;quot;:&lt;br /&gt;
		cmd.select(&amp;quot;RefAtom&amp;quot;, cen+refA)&lt;br /&gt;
		m1=cmd.get_model (&amp;quot;RefAtom&amp;quot;)&lt;br /&gt;
	cmd.select(&amp;quot;Atoms&amp;quot;, cen+refA+&amp;quot; around &amp;quot;+str(dist)+&amp;quot; and not resi &amp;quot;+ref+&amp;quot; and &amp;quot;+obj)&lt;br /&gt;
	cmd.show(&amp;quot;nb_spheres&amp;quot;, &amp;quot;(Atoms or Reference) and (resn HOH or HET)&amp;quot;)&lt;br /&gt;
	cmd.select(&amp;quot;Residues&amp;quot;, &amp;quot;byres Atoms&amp;quot;)&lt;br /&gt;
	m2=cmd.get_model(&amp;quot;Atoms and visible&amp;quot;)	&lt;br /&gt;
	if Hbonds==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		cmd.select(&amp;quot;__Hbonds1&amp;quot;, &amp;quot;Reference and not symbol c&amp;quot;)&lt;br /&gt;
		if aname!=&amp;quot;*&amp;quot;:&lt;br /&gt;
			cmd.select(&amp;quot;__Hbonds1&amp;quot;, &amp;quot;RefAtom and not symbol c&amp;quot;)&lt;br /&gt;
		cmd.select(&amp;quot;__Hbonds2&amp;quot;, &amp;quot;Atoms and not symbol c&amp;quot;)&lt;br /&gt;
		cmd.select(&amp;quot;Hbonds&amp;quot;, &amp;quot;__Hbonds1 or __Hbonds2&amp;quot;)&lt;br /&gt;
		cmd.show(&amp;quot;lines&amp;quot;, &amp;quot;Hbonds&amp;quot;)&lt;br /&gt;
		m1=cmd.get_model (&amp;quot;__Hbonds1&amp;quot;)&lt;br /&gt;
		m2=cmd.get_model (&amp;quot;__Hbonds2 and visible&amp;quot;)	&lt;br /&gt;
	&lt;br /&gt;
	#controllers	&lt;br /&gt;
	if (not (output==&amp;quot;S&amp;quot; or output==&amp;quot;N&amp;quot; or output==&amp;quot;P&amp;quot;)) or (not (show==&amp;quot;Y&amp;quot; or show==&amp;quot;N&amp;quot;)) or (not (Hbonds==&amp;quot;Y&amp;quot; or Hbonds==&amp;quot;N&amp;quot;)):&lt;br /&gt;
		print &amp;quot;Malformed input, please try again&amp;quot;&lt;br /&gt;
		return&lt;br /&gt;
	abort=1&lt;br /&gt;
	abort2=0&lt;br /&gt;
	mc=cmd.get_model(cen)&lt;br /&gt;
	for c0 in range(len(mc.atom)):&lt;br /&gt;
		if mc.atom[c0].resi==ref: abort=0&lt;br /&gt;
	mc2=cmd.get_model(cen+refA)&lt;br /&gt;
	if aname!=&amp;quot;*&amp;quot;:&lt;br /&gt;
		abort2=1&lt;br /&gt;
		for c00 in range (len(mc2.atom)):	&lt;br /&gt;
			if mc2.atom[c00].name==aname: abort2=0&lt;br /&gt;
	if Hbonds==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		if aname[0]==&amp;quot;C&amp;quot;:&lt;br /&gt;
			print &amp;quot;Warning: no atoms in the selection can form H-bonds&amp;quot;&lt;br /&gt;
			return&lt;br /&gt;
	if abort==1: print &amp;quot;Warning: no such residue in the reference object&amp;quot;&lt;br /&gt;
	if abort2==1: &lt;br /&gt;
		if abort==0: print &amp;quot;Warning: no such atom in the reference object&amp;quot;&lt;br /&gt;
	if abort==1 or abort2==1: return&lt;br /&gt;
&lt;br /&gt;
	#measures distances&lt;br /&gt;
	distance2=[]&lt;br /&gt;
	distances=[]&lt;br /&gt;
	screenOP=&amp;quot;&amp;quot;	&lt;br /&gt;
	fileOP=&amp;quot;&amp;quot;&lt;br /&gt;
	for c1 in range(len(m1.atom)):&lt;br /&gt;
		for c2 in range(len(m2.atom)):&lt;br /&gt;
			if math.sqrt(sum(map(lambda f: (f[0]-f[1])**2, zip(m1.atom[c1].coord,m2.atom[c2].coord))))&amp;lt;float(dist):&lt;br /&gt;
				distance=cmd.distance (obj+&amp;quot;//&amp;quot;+m1.atom[c1].chain+&amp;quot;/&amp;quot;+m1.atom[c1].resi+&amp;quot;/&amp;quot;+m1.atom[c1].name, obj+&amp;quot;//&amp;quot;+m2.atom[c2].chain+&amp;quot;/&amp;quot;+m2.atom[c2].resi+&amp;quot;/&amp;quot;+m2.atom[c2].name)&lt;br /&gt;
				distances.append(distance)&lt;br /&gt;
				screenOP+=&amp;quot;%s/%s/%s/%s to %s/%s/%s/%s: %.3f\n&amp;quot; % (m1.atom[c1].chain,m1.atom[c1].resn,m1.atom[c1].resi,m1.atom[c1].name,m2.atom[c2].chain,m2.atom[c2].resn,m2.atom[c2].resi,m2.atom[c2].name, distance)&lt;br /&gt;
				fileOP+=&amp;quot;%s/%s/%s/%s\t\t\t%s/%s/%s/%s\t\t\t\t%.5f\n&amp;quot;%  (m1.atom[c1].chain,m1.atom[c1].resn,m1.atom[c1].resi,m1.atom[c1].name,m2.atom[c2].chain,m2.atom[c2].resn,m2.atom[c2].resi,m2.atom[c2].name, distance)	&lt;br /&gt;
	#last controller&lt;br /&gt;
	if len(distances)==0:&lt;br /&gt;
		if abort2==0:&lt;br /&gt;
			print &amp;quot;Warning: no atoms within the selected range&amp;quot;&lt;br /&gt;
		return&lt;br /&gt;
&lt;br /&gt;
	#data outputs&lt;br /&gt;
	if output==&amp;quot;N&amp;quot;: print &amp;quot;Data recorded, but not printed&amp;quot;&lt;br /&gt;
	if output==&amp;quot;S&amp;quot;:&lt;br /&gt;
		print &amp;quot;Distance of atoms in &amp;quot;+obj+&amp;quot;/&amp;quot;+ref+&amp;quot;/&amp;quot;+aname+&amp;quot; to all atoms within &amp;quot;+dist+&amp;quot; Angstroms&amp;quot;&lt;br /&gt;
		if Hbonds==&amp;quot;Y&amp;quot;: print &amp;quot;Distances restricted to potential H-bond pairs&amp;quot;&lt;br /&gt;
		print screenOP	&lt;br /&gt;
	if output==&amp;quot;P&amp;quot;:&lt;br /&gt;
		if aname==&amp;quot;*&amp;quot;: aname=&amp;quot;ALL&amp;quot;&lt;br /&gt;
		print 'data printed in &amp;quot;distances_rH_'+ref+'-'+aname+'.txt&amp;quot; file'&lt;br /&gt;
		f=open('distances_rH_'+ref+'-'+aname+'.txt','w')&lt;br /&gt;
		f.write(&amp;quot;Pairwise distances betweet atoms in %s and all atoms within %s Angstroms\n&amp;quot; % (obj+&amp;quot;/&amp;quot;+ref+&amp;quot;/&amp;quot;+aname, dist))&lt;br /&gt;
		if Hbonds==&amp;quot;Y&amp;quot;: f.write(&amp;quot;Distances restricted to potential H-bond pairs\n&amp;quot;)&lt;br /&gt;
		f.write(&amp;quot;Atom in reference\tAtom in destination\t\tdistance\n&amp;quot;)&lt;br /&gt;
		f.write(fileOP)&lt;br /&gt;
		f.close()&lt;br /&gt;
	print &amp;quot;All done! Good luck with your data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	#graphical output&lt;br /&gt;
	if show==&amp;quot;N&amp;quot;: cmd.delete (&amp;quot;dist*&amp;quot;)&lt;br /&gt;
	if show==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		cmd.show(&amp;quot;lines&amp;quot;, &amp;quot;Reference&amp;quot;)&lt;br /&gt;
		cmd.show(&amp;quot;lines&amp;quot;, &amp;quot;Residues&amp;quot;)&lt;br /&gt;
				&lt;br /&gt;
cmd.extend(&amp;quot;distancesRH&amp;quot;, distancesRH);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Script_Library]]&lt;br /&gt;
[[Category:ObjSel_Scripts]]&lt;br /&gt;
[[Category:Biochemical_Scripts]]&lt;br /&gt;
[[Category:Structural_Biology_Scripts]]&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=DistancesRH&amp;diff=5419</id>
		<title>DistancesRH</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=DistancesRH&amp;diff=5419"/>
		<updated>2013-01-11T11:50:01Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox script-repo&lt;br /&gt;
|type      = script&lt;br /&gt;
|download  = &lt;br /&gt;
|author    = [[User:PietroGattiLafranconi|Pietro Gatti-Lafranconi]]&lt;br /&gt;
|license   = [http://creativecommons.org/licenses/by-nc-sa/3.0 CC BY-NC-SA]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Given an object, a reference amino acid and a radius, this scripts calculates pairwise distances between atom(s) in the reference and all atoms that fall within the given range.&lt;br /&gt;
&lt;br /&gt;
The script is intended to provide a range of useful tools while requiring minimal coding skills (i.e. it is not optimised for efficiency).&lt;br /&gt;
&lt;br /&gt;
By changing input parameters it is possible to:&lt;br /&gt;
* choose the output (none, on screen, on file)&lt;br /&gt;
* measure distances from one single atom&lt;br /&gt;
* display distance objects in pymol&lt;br /&gt;
* restrict distances between hydrogen-bond forming atoms only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The script also runs a number of controls to verify that inputs and outputs exists/are suitable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
 distancesRH obj, ref, dist, [chain, [output S/P/N, [show Y/N, [Hbonds Y/N, [aname]]]]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Required Arguments ==&lt;br /&gt;
* '''obj''' = object name&lt;br /&gt;
* '''ref''' = reference amino acid id&lt;br /&gt;
* '''dist''' = radius in Angstroms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Optional Arguments ==&lt;br /&gt;
* ''chain'' = selected chain&lt;br /&gt;
* ''output'' = accepts S (screen), P (print) or N (none), default=S&lt;br /&gt;
* ''show'' = shows distances in pymol window, default=N&lt;br /&gt;
* ''Hbonds'' = restricts results to atoms that can form Hbonds, default=N&lt;br /&gt;
* ''aname'' = selects a specific atom in reference object and to calculate distances from one individual atom&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
example #1&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
distancesRH 2WHH, 25, 3.2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Will show distances between all atoms of residue 25 in 2WHH and any atom within 3.2 Å and return the result on screen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
example #2&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
distancesRH 1LVM, 151, 3, B, P, Y, Y, N&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Will show distances between N of residue 151 in chain B of 1LVM and all atoms within 3 Å. Distances are limited to atoms that can form hydrogen bonds and will be printed in &amp;quot;dist_rH_151_N.txt&amp;quot;. Dist objects will be shown in pymol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Notes, Further Developments and Requests ==&lt;br /&gt;
* This script works with visible objects (handling of multiple states will hopefully be implemented soon)&lt;br /&gt;
* As it is intended to be user-friendly more than fast, this script is not suitable to calculate distances between large objects. Use [[Quick_dist]] instead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
* '''11/01/2013''' - edit #1: ''distances are now calculated across different chains as well''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Code ==&lt;br /&gt;
&lt;br /&gt;
Copy the following text and save it as distancesRH.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
Given an object, a reference amino acid and a radius, this scripts calculates pairwise&lt;br /&gt;
distances between all atoms in the reference and all atoms that fall within the given range.&lt;br /&gt;
Distances are either returned on screen (default) or printed on file.&lt;br /&gt;
Distances can be calculated from a single atom only.&lt;br /&gt;
Optionally, only atoms that can form H-bonds can be returned (but check distances!)&lt;br /&gt;
&lt;br /&gt;
More information at: PymolWiki&lt;br /&gt;
http://pymolwiki.org/index.php/DistancesRH&lt;br /&gt;
&lt;br /&gt;
AUTHOR&lt;br /&gt;
Pietro Gatti-Lafranconi, 2012&lt;br /&gt;
Please inform me if you use/improve/like/dislike/publish with this script.&lt;br /&gt;
CC BY-NC-SA&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
from pymol import cmd, stored, math&lt;br /&gt;
	&lt;br /&gt;
def distancesRH (obj, ref, dist, chain=0, output=&amp;quot;S&amp;quot;, show=&amp;quot;N&amp;quot;, Hbonds=&amp;quot;N&amp;quot;, aname=&amp;quot;*&amp;quot;):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;	&lt;br /&gt;
	usage: distancesRH obj, ref, dist, [chain, [output S/P/N, [show Y/N, [Hbonds Y/N, [aname]]]]]&lt;br /&gt;
	&lt;br /&gt;
	obj: object name, ref:reference aa, dist: radius in A, chain: selected chain&lt;br /&gt;
	output: accepts S (screen), P (print) or N (none), default=S&lt;br /&gt;
	show: shows distances in pymol window, default=N&lt;br /&gt;
	Hbonds: restricts results to atoms that can form Hbonds, default=N&lt;br /&gt;
	aname: name of a specific atom in ref (to calculate distances from one atom only)&lt;br /&gt;
		&lt;br /&gt;
	example: distancesRH 2WHH, 25, 3.2, [B, [S, [N, [Y, [CB]]]]]&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	print &amp;quot;&amp;quot;&lt;br /&gt;
	#delete previous selections and displayed distances&lt;br /&gt;
	cmd.delete (&amp;quot;dist*&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Atoms&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Residues&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Reference&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Hbonds&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;RefAtom&amp;quot;)&lt;br /&gt;
	#creates and names selections	&lt;br /&gt;
	if chain==0: cen=obj&lt;br /&gt;
	else: cen=obj+&amp;quot; and chain &amp;quot;+chain&lt;br /&gt;
	refA=&amp;quot; and resi &amp;quot;+ref+&amp;quot; and name &amp;quot;+aname&lt;br /&gt;
	cmd.select(&amp;quot;Reference&amp;quot;, &amp;quot;byres &amp;quot;+cen+refA)&lt;br /&gt;
	m1=cmd.get_model (&amp;quot;Reference&amp;quot;)&lt;br /&gt;
	if aname!=&amp;quot;*&amp;quot;:&lt;br /&gt;
		cmd.select(&amp;quot;RefAtom&amp;quot;, cen+refA)&lt;br /&gt;
		m1=cmd.get_model (&amp;quot;RefAtom&amp;quot;)&lt;br /&gt;
	cmd.select(&amp;quot;Atoms&amp;quot;, cen+refA+&amp;quot; around &amp;quot;+str(dist)+&amp;quot; and not resi &amp;quot;+ref+&amp;quot; and &amp;quot;+obj)&lt;br /&gt;
	cmd.show(&amp;quot;nb_spheres&amp;quot;, &amp;quot;(Atoms or Reference) and (resn HOH or HET)&amp;quot;)&lt;br /&gt;
	cmd.select(&amp;quot;Residues&amp;quot;, &amp;quot;byres Atoms&amp;quot;)&lt;br /&gt;
	m2=cmd.get_model(&amp;quot;Atoms and visible&amp;quot;)	&lt;br /&gt;
	if Hbonds==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		cmd.select(&amp;quot;__Hbonds1&amp;quot;, &amp;quot;Reference and not symbol c&amp;quot;)&lt;br /&gt;
		if aname!=&amp;quot;*&amp;quot;:&lt;br /&gt;
			cmd.select(&amp;quot;__Hbonds1&amp;quot;, &amp;quot;RefAtom and not symbol c&amp;quot;)&lt;br /&gt;
		cmd.select(&amp;quot;__Hbonds2&amp;quot;, &amp;quot;Atoms and not symbol c&amp;quot;)&lt;br /&gt;
		cmd.select(&amp;quot;Hbonds&amp;quot;, &amp;quot;__Hbonds1 or __Hbonds2&amp;quot;)&lt;br /&gt;
		cmd.show(&amp;quot;lines&amp;quot;, &amp;quot;Hbonds&amp;quot;)&lt;br /&gt;
		m1=cmd.get_model (&amp;quot;__Hbonds1&amp;quot;)&lt;br /&gt;
		m2=cmd.get_model (&amp;quot;__Hbonds2 and visible&amp;quot;)	&lt;br /&gt;
	&lt;br /&gt;
	#controllers	&lt;br /&gt;
	if (not (output==&amp;quot;S&amp;quot; or output==&amp;quot;N&amp;quot; or output==&amp;quot;P&amp;quot;)) or (not (show==&amp;quot;Y&amp;quot; or show==&amp;quot;N&amp;quot;)) or (not (Hbonds==&amp;quot;Y&amp;quot; or Hbonds==&amp;quot;N&amp;quot;)):&lt;br /&gt;
		print &amp;quot;Malformed input, please try again&amp;quot;&lt;br /&gt;
		return&lt;br /&gt;
	abort=1&lt;br /&gt;
	abort2=0&lt;br /&gt;
	mc=cmd.get_model(cen)&lt;br /&gt;
	for c0 in range(len(mc.atom)):&lt;br /&gt;
		if mc.atom[c0].resi==ref: abort=0&lt;br /&gt;
	mc2=cmd.get_model(cen+refA)&lt;br /&gt;
	if aname!=&amp;quot;*&amp;quot;:&lt;br /&gt;
		abort2=1&lt;br /&gt;
		for c00 in range (len(mc2.atom)):	&lt;br /&gt;
			if mc2.atom[c00].name==aname: abort2=0&lt;br /&gt;
	if Hbonds==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		if aname[0]==&amp;quot;C&amp;quot;:&lt;br /&gt;
			print &amp;quot;Warning: no atoms in the selection can form H-bonds&amp;quot;&lt;br /&gt;
			return&lt;br /&gt;
	if abort==1: print &amp;quot;Warning: no such residue in the reference object&amp;quot;&lt;br /&gt;
	if abort2==1: &lt;br /&gt;
		if abort==0: print &amp;quot;Warning: no such atom in the reference object&amp;quot;&lt;br /&gt;
	if abort==1 or abort2==1: return&lt;br /&gt;
&lt;br /&gt;
	#measures distances&lt;br /&gt;
	distance2=[]&lt;br /&gt;
	distances=[]&lt;br /&gt;
	screenOP=&amp;quot;&amp;quot;	&lt;br /&gt;
	fileOP=&amp;quot;&amp;quot;&lt;br /&gt;
	for c1 in range(len(m1.atom)):&lt;br /&gt;
		for c2 in range(len(m2.atom)):&lt;br /&gt;
			if math.sqrt(sum(map(lambda f: (f[0]-f[1])**2, zip(m1.atom[c1].coord,m2.atom[c2].coord))))&amp;lt;float(dist):&lt;br /&gt;
				distance=cmd.distance (obj+&amp;quot;//&amp;quot;+m1.atom[c1].chain+&amp;quot;/&amp;quot;+m1.atom[c1].resi+&amp;quot;/&amp;quot;+m1.atom[c1].name, obj+&amp;quot;//&amp;quot;+m2.atom[c2].chain+&amp;quot;/&amp;quot;+m2.atom[c2].resi+&amp;quot;/&amp;quot;+m2.atom[c2].name)&lt;br /&gt;
				distances.append(distance)&lt;br /&gt;
				screenOP+=&amp;quot;%s/%s/%s/%s to %s/%s/%s/%s: %.3f\n&amp;quot; % (m1.atom[c1].chain,m1.atom[c1].resn,m1.atom[c1].resi,m1.atom[c1].name,m2.atom[c2].chain,m2.atom[c2].resn,m2.atom[c2].resi,m2.atom[c2].name, distance)&lt;br /&gt;
				fileOP+=&amp;quot;%s/%s/%s/%s\t\t\t%s/%s/%s/%s\t\t\t\t%.5f\n&amp;quot;%  (m1.atom[c1].chain,m1.atom[c1].resn,m1.atom[c1].resi,m1.atom[c1].name,m2.atom[c2].chain,m2.atom[c2].resn,m2.atom[c2].resi,m2.atom[c2].name, distance)	&lt;br /&gt;
	#last controller&lt;br /&gt;
	if len(distances)==0:&lt;br /&gt;
		if abort2==0:&lt;br /&gt;
			print &amp;quot;Warning: no atoms within the selected range&amp;quot;&lt;br /&gt;
		return&lt;br /&gt;
&lt;br /&gt;
	#data outputs&lt;br /&gt;
	if output==&amp;quot;N&amp;quot;: print &amp;quot;Data recorded, but not printed&amp;quot;&lt;br /&gt;
	if output==&amp;quot;S&amp;quot;:&lt;br /&gt;
		print &amp;quot;Distance of atoms in &amp;quot;+obj+&amp;quot;/&amp;quot;+ref+&amp;quot;/&amp;quot;+aname+&amp;quot; to all atoms within &amp;quot;+dist+&amp;quot; Angstroms&amp;quot;&lt;br /&gt;
		if Hbonds==&amp;quot;Y&amp;quot;: print &amp;quot;Distances restricted to potential H-bond pairs&amp;quot;&lt;br /&gt;
		print screenOP	&lt;br /&gt;
	if output==&amp;quot;P&amp;quot;:&lt;br /&gt;
		print 'data printed in &amp;quot;distances_rH_'+ref+'-'+aname+'.txt&amp;quot; file'&lt;br /&gt;
		f=open('distances_rH_'+ref+'-'+aname+'.txt','w')&lt;br /&gt;
		f.write(&amp;quot;Pairwise distances betweet atoms in %s and all atoms within %s Angstroms\n&amp;quot; % (obj+&amp;quot;/&amp;quot;+ref+&amp;quot;/&amp;quot;+aname, dist))&lt;br /&gt;
		if Hbonds==&amp;quot;Y&amp;quot;: f.write(&amp;quot;Distances restricted to potential H-bond pairs\n&amp;quot;)&lt;br /&gt;
		f.write(&amp;quot;Atom in reference\tAtom in destination\t\tdistance\n&amp;quot;)&lt;br /&gt;
		f.write(fileOP)&lt;br /&gt;
		f.close()&lt;br /&gt;
	print &amp;quot;All done! Good luck with your data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	#graphical output&lt;br /&gt;
	if show==&amp;quot;N&amp;quot;: cmd.delete (&amp;quot;dist*&amp;quot;)&lt;br /&gt;
	if show==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		cmd.show(&amp;quot;lines&amp;quot;, &amp;quot;Reference&amp;quot;)&lt;br /&gt;
		cmd.show(&amp;quot;lines&amp;quot;, &amp;quot;Residues&amp;quot;)&lt;br /&gt;
				&lt;br /&gt;
cmd.extend(&amp;quot;distancesRH&amp;quot;, distancesRH);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Script_Library]]&lt;br /&gt;
[[Category:ObjSel_Scripts]]&lt;br /&gt;
[[Category:Biochemical_Scripts]]&lt;br /&gt;
[[Category:Structural_Biology_Scripts]]&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=DistancesRH&amp;diff=5418</id>
		<title>DistancesRH</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=DistancesRH&amp;diff=5418"/>
		<updated>2013-01-11T11:49:25Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: code update&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox script-repo&lt;br /&gt;
|type      = script&lt;br /&gt;
|download  = &lt;br /&gt;
|author    = [[User:PietroGattiLafranconi|Pietro Gatti-Lafranconi]]&lt;br /&gt;
|license   = [http://creativecommons.org/licenses/by-nc-sa/3.0 CC BY-NC-SA]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Given an object, a reference amino acid and a radius, this scripts calculates pairwise distances between atom(s) in the reference and all atoms that fall within the given range.&lt;br /&gt;
&lt;br /&gt;
The script is intended to provide a range of useful tools while requiring minimal coding skills (i.e. it is not optimised for efficiency).&lt;br /&gt;
&lt;br /&gt;
By changing input parameters it is possible to:&lt;br /&gt;
* choose the output (none, on screen, on file)&lt;br /&gt;
* measure distances from one single atom&lt;br /&gt;
* display distance objects in pymol&lt;br /&gt;
* restrict distances between hydrogen-bond forming atoms only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The script also runs a number of controls to verify that inputs and outputs exists/are suitable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
 distancesRH obj, ref, dist, [chain, [output S/P/N, [show Y/N, [Hbonds Y/N, [aname]]]]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Required Arguments ==&lt;br /&gt;
* '''obj''' = object name&lt;br /&gt;
* '''ref''' = reference amino acid id&lt;br /&gt;
* '''dist''' = radius in Angstroms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Optional Arguments ==&lt;br /&gt;
* ''chain'' = selected chain&lt;br /&gt;
* ''output'' = accepts S (screen), P (print) or N (none), default=S&lt;br /&gt;
* ''show'' = shows distances in pymol window, default=N&lt;br /&gt;
* ''Hbonds'' = restricts results to atoms that can form Hbonds, default=N&lt;br /&gt;
* ''aname'' = selects a specific atom in reference object and to calculate distances from one individual atom&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
example #1&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
distancesRH 2WHH, 25, 3.2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Will show distances between all atoms of residue 25 in 2WHH and any atom within 3.2 Å and return the result on screen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
example #2&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
distancesRH 1LVM, 151, 3, B, P, Y, Y, N&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Will show distances between N of residue 151 in chain B of 1LVM and all atoms within 3 Å. Distances are limited to atoms that can form hydrogen bonds and will be printed in &amp;quot;dist_rH_151_N.txt&amp;quot;. Dist objects will be shown in pymol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Notes, Further Developments and Requests ==&lt;br /&gt;
* This script works with visible objects (handling of multiple states will hopefully be implemented soon)&lt;br /&gt;
* As it is intended to be user-friendly more than fast, this script is not suitable to calculate distances between large objects. Use [[Quick_dist]] instead.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Updates ==&lt;br /&gt;
* ''11/01/2013'' - edit #1: '''distances are now calculated across different chains as well'''&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Code ==&lt;br /&gt;
&lt;br /&gt;
Copy the following text and save it as distancesRH.py&lt;br /&gt;
&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
DESCRIPTION&lt;br /&gt;
Given an object, a reference amino acid and a radius, this scripts calculates pairwise&lt;br /&gt;
distances between all atoms in the reference and all atoms that fall within the given range.&lt;br /&gt;
Distances are either returned on screen (default) or printed on file.&lt;br /&gt;
Distances can be calculated from a single atom only.&lt;br /&gt;
Optionally, only atoms that can form H-bonds can be returned (but check distances!)&lt;br /&gt;
&lt;br /&gt;
More information at: PymolWiki&lt;br /&gt;
http://pymolwiki.org/index.php/DistancesRH&lt;br /&gt;
&lt;br /&gt;
AUTHOR&lt;br /&gt;
Pietro Gatti-Lafranconi, 2012&lt;br /&gt;
Please inform me if you use/improve/like/dislike/publish with this script.&lt;br /&gt;
CC BY-NC-SA&lt;br /&gt;
&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
&lt;br /&gt;
from pymol import cmd, stored, math&lt;br /&gt;
	&lt;br /&gt;
def distancesRH (obj, ref, dist, chain=0, output=&amp;quot;S&amp;quot;, show=&amp;quot;N&amp;quot;, Hbonds=&amp;quot;N&amp;quot;, aname=&amp;quot;*&amp;quot;):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;	&lt;br /&gt;
	usage: distancesRH obj, ref, dist, [chain, [output S/P/N, [show Y/N, [Hbonds Y/N, [aname]]]]]&lt;br /&gt;
	&lt;br /&gt;
	obj: object name, ref:reference aa, dist: radius in A, chain: selected chain&lt;br /&gt;
	output: accepts S (screen), P (print) or N (none), default=S&lt;br /&gt;
	show: shows distances in pymol window, default=N&lt;br /&gt;
	Hbonds: restricts results to atoms that can form Hbonds, default=N&lt;br /&gt;
	aname: name of a specific atom in ref (to calculate distances from one atom only)&lt;br /&gt;
		&lt;br /&gt;
	example: distancesRH 2WHH, 25, 3.2, [B, [S, [N, [Y, [CB]]]]]&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	print &amp;quot;&amp;quot;&lt;br /&gt;
	#delete previous selections and displayed distances&lt;br /&gt;
	cmd.delete (&amp;quot;dist*&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Atoms&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Residues&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Reference&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Hbonds&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;RefAtom&amp;quot;)&lt;br /&gt;
	#creates and names selections	&lt;br /&gt;
	if chain==0: cen=obj&lt;br /&gt;
	else: cen=obj+&amp;quot; and chain &amp;quot;+chain&lt;br /&gt;
	refA=&amp;quot; and resi &amp;quot;+ref+&amp;quot; and name &amp;quot;+aname&lt;br /&gt;
	cmd.select(&amp;quot;Reference&amp;quot;, &amp;quot;byres &amp;quot;+cen+refA)&lt;br /&gt;
	m1=cmd.get_model (&amp;quot;Reference&amp;quot;)&lt;br /&gt;
	if aname!=&amp;quot;*&amp;quot;:&lt;br /&gt;
		cmd.select(&amp;quot;RefAtom&amp;quot;, cen+refA)&lt;br /&gt;
		m1=cmd.get_model (&amp;quot;RefAtom&amp;quot;)&lt;br /&gt;
	cmd.select(&amp;quot;Atoms&amp;quot;, cen+refA+&amp;quot; around &amp;quot;+str(dist)+&amp;quot; and not resi &amp;quot;+ref+&amp;quot; and &amp;quot;+obj)&lt;br /&gt;
	cmd.show(&amp;quot;nb_spheres&amp;quot;, &amp;quot;(Atoms or Reference) and (resn HOH or HET)&amp;quot;)&lt;br /&gt;
	cmd.select(&amp;quot;Residues&amp;quot;, &amp;quot;byres Atoms&amp;quot;)&lt;br /&gt;
	m2=cmd.get_model(&amp;quot;Atoms and visible&amp;quot;)	&lt;br /&gt;
	if Hbonds==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		cmd.select(&amp;quot;__Hbonds1&amp;quot;, &amp;quot;Reference and not symbol c&amp;quot;)&lt;br /&gt;
		if aname!=&amp;quot;*&amp;quot;:&lt;br /&gt;
			cmd.select(&amp;quot;__Hbonds1&amp;quot;, &amp;quot;RefAtom and not symbol c&amp;quot;)&lt;br /&gt;
		cmd.select(&amp;quot;__Hbonds2&amp;quot;, &amp;quot;Atoms and not symbol c&amp;quot;)&lt;br /&gt;
		cmd.select(&amp;quot;Hbonds&amp;quot;, &amp;quot;__Hbonds1 or __Hbonds2&amp;quot;)&lt;br /&gt;
		cmd.show(&amp;quot;lines&amp;quot;, &amp;quot;Hbonds&amp;quot;)&lt;br /&gt;
		m1=cmd.get_model (&amp;quot;__Hbonds1&amp;quot;)&lt;br /&gt;
		m2=cmd.get_model (&amp;quot;__Hbonds2 and visible&amp;quot;)	&lt;br /&gt;
	&lt;br /&gt;
	#controllers	&lt;br /&gt;
	if (not (output==&amp;quot;S&amp;quot; or output==&amp;quot;N&amp;quot; or output==&amp;quot;P&amp;quot;)) or (not (show==&amp;quot;Y&amp;quot; or show==&amp;quot;N&amp;quot;)) or (not (Hbonds==&amp;quot;Y&amp;quot; or Hbonds==&amp;quot;N&amp;quot;)):&lt;br /&gt;
		print &amp;quot;Malformed input, please try again&amp;quot;&lt;br /&gt;
		return&lt;br /&gt;
	abort=1&lt;br /&gt;
	abort2=0&lt;br /&gt;
	mc=cmd.get_model(cen)&lt;br /&gt;
	for c0 in range(len(mc.atom)):&lt;br /&gt;
		if mc.atom[c0].resi==ref: abort=0&lt;br /&gt;
	mc2=cmd.get_model(cen+refA)&lt;br /&gt;
	if aname!=&amp;quot;*&amp;quot;:&lt;br /&gt;
		abort2=1&lt;br /&gt;
		for c00 in range (len(mc2.atom)):	&lt;br /&gt;
			if mc2.atom[c00].name==aname: abort2=0&lt;br /&gt;
	if Hbonds==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		if aname[0]==&amp;quot;C&amp;quot;:&lt;br /&gt;
			print &amp;quot;Warning: no atoms in the selection can form H-bonds&amp;quot;&lt;br /&gt;
			return&lt;br /&gt;
	if abort==1: print &amp;quot;Warning: no such residue in the reference object&amp;quot;&lt;br /&gt;
	if abort2==1: &lt;br /&gt;
		if abort==0: print &amp;quot;Warning: no such atom in the reference object&amp;quot;&lt;br /&gt;
	if abort==1 or abort2==1: return&lt;br /&gt;
&lt;br /&gt;
	#measures distances&lt;br /&gt;
	distance2=[]&lt;br /&gt;
	distances=[]&lt;br /&gt;
	screenOP=&amp;quot;&amp;quot;	&lt;br /&gt;
	fileOP=&amp;quot;&amp;quot;&lt;br /&gt;
	for c1 in range(len(m1.atom)):&lt;br /&gt;
		for c2 in range(len(m2.atom)):&lt;br /&gt;
			if math.sqrt(sum(map(lambda f: (f[0]-f[1])**2, zip(m1.atom[c1].coord,m2.atom[c2].coord))))&amp;lt;float(dist):&lt;br /&gt;
				distance=cmd.distance (obj+&amp;quot;//&amp;quot;+m1.atom[c1].chain+&amp;quot;/&amp;quot;+m1.atom[c1].resi+&amp;quot;/&amp;quot;+m1.atom[c1].name, obj+&amp;quot;//&amp;quot;+m2.atom[c2].chain+&amp;quot;/&amp;quot;+m2.atom[c2].resi+&amp;quot;/&amp;quot;+m2.atom[c2].name)&lt;br /&gt;
				distances.append(distance)&lt;br /&gt;
				screenOP+=&amp;quot;%s/%s/%s/%s to %s/%s/%s/%s: %.3f\n&amp;quot; % (m1.atom[c1].chain,m1.atom[c1].resn,m1.atom[c1].resi,m1.atom[c1].name,m2.atom[c2].chain,m2.atom[c2].resn,m2.atom[c2].resi,m2.atom[c2].name, distance)&lt;br /&gt;
				fileOP+=&amp;quot;%s/%s/%s/%s\t\t\t%s/%s/%s/%s\t\t\t\t%.5f\n&amp;quot;%  (m1.atom[c1].chain,m1.atom[c1].resn,m1.atom[c1].resi,m1.atom[c1].name,m2.atom[c2].chain,m2.atom[c2].resn,m2.atom[c2].resi,m2.atom[c2].name, distance)	&lt;br /&gt;
	#last controller&lt;br /&gt;
	if len(distances)==0:&lt;br /&gt;
		if abort2==0:&lt;br /&gt;
			print &amp;quot;Warning: no atoms within the selected range&amp;quot;&lt;br /&gt;
		return&lt;br /&gt;
&lt;br /&gt;
	#data outputs&lt;br /&gt;
	if output==&amp;quot;N&amp;quot;: print &amp;quot;Data recorded, but not printed&amp;quot;&lt;br /&gt;
	if output==&amp;quot;S&amp;quot;:&lt;br /&gt;
		print &amp;quot;Distance of atoms in &amp;quot;+obj+&amp;quot;/&amp;quot;+ref+&amp;quot;/&amp;quot;+aname+&amp;quot; to all atoms within &amp;quot;+dist+&amp;quot; Angstroms&amp;quot;&lt;br /&gt;
		if Hbonds==&amp;quot;Y&amp;quot;: print &amp;quot;Distances restricted to potential H-bond pairs&amp;quot;&lt;br /&gt;
		print screenOP	&lt;br /&gt;
	if output==&amp;quot;P&amp;quot;:&lt;br /&gt;
		print 'data printed in &amp;quot;distances_rH_'+ref+'-'+aname+'.txt&amp;quot; file'&lt;br /&gt;
		f=open('distances_rH_'+ref+'-'+aname+'.txt','w')&lt;br /&gt;
		f.write(&amp;quot;Pairwise distances betweet atoms in %s and all atoms within %s Angstroms\n&amp;quot; % (obj+&amp;quot;/&amp;quot;+ref+&amp;quot;/&amp;quot;+aname, dist))&lt;br /&gt;
		if Hbonds==&amp;quot;Y&amp;quot;: f.write(&amp;quot;Distances restricted to potential H-bond pairs\n&amp;quot;)&lt;br /&gt;
		f.write(&amp;quot;Atom in reference\tAtom in destination\t\tdistance\n&amp;quot;)&lt;br /&gt;
		f.write(fileOP)&lt;br /&gt;
		f.close()&lt;br /&gt;
	print &amp;quot;All done! Good luck with your data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	#graphical output&lt;br /&gt;
	if show==&amp;quot;N&amp;quot;: cmd.delete (&amp;quot;dist*&amp;quot;)&lt;br /&gt;
	if show==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		cmd.show(&amp;quot;lines&amp;quot;, &amp;quot;Reference&amp;quot;)&lt;br /&gt;
		cmd.show(&amp;quot;lines&amp;quot;, &amp;quot;Residues&amp;quot;)&lt;br /&gt;
				&lt;br /&gt;
cmd.extend(&amp;quot;distancesRH&amp;quot;, distancesRH);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Script_Library]]&lt;br /&gt;
[[Category:ObjSel_Scripts]]&lt;br /&gt;
[[Category:Biochemical_Scripts]]&lt;br /&gt;
[[Category:Structural_Biology_Scripts]]&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=DistancesRH&amp;diff=5417</id>
		<title>DistancesRH</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=DistancesRH&amp;diff=5417"/>
		<updated>2013-01-04T11:45:48Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox script-repo&lt;br /&gt;
|type      = script&lt;br /&gt;
|download  = &lt;br /&gt;
|author    = [[User:PietroGattiLafranconi|Pietro Gatti-Lafranconi]]&lt;br /&gt;
|license   = [http://creativecommons.org/licenses/by-nc-sa/3.0 CC BY-NC-SA]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Given an object, a reference amino acid and a radius, this scripts calculates pairwise distances between atom(s) in the reference and all atoms that fall within the given range.&lt;br /&gt;
&lt;br /&gt;
The script is intended to provide a range of useful tools while requiring minimal coding skills (i.e. it is not optimised for efficiency).&lt;br /&gt;
&lt;br /&gt;
By changing input parameters it is possible to:&lt;br /&gt;
* choose the output (none, on screen, on file)&lt;br /&gt;
* measure distances from one single atom&lt;br /&gt;
* display distance objects in pymol&lt;br /&gt;
* restrict distances between hydrogen-bond forming atoms only&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
The script also runs a number of controls to verify that inputs and outputs exists/are suitable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
 distancesRH obj, ref, dist, [chain, [output S/P/N, [show Y/N, [Hbonds Y/N, [aname]]]]]&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Required Arguments ==&lt;br /&gt;
* '''obj''' = object name&lt;br /&gt;
* '''ref''' = reference amino acid id&lt;br /&gt;
* '''dist''' = radius in Angstroms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Optional Arguments ==&lt;br /&gt;
* ''chain'' = selected chain&lt;br /&gt;
* ''output'' = accepts S (screen), P (print) or N (none), default=S&lt;br /&gt;
* ''show'' = shows distances in pymol window, default=N&lt;br /&gt;
* ''Hbonds'' = restricts results to atoms that can form Hbonds, default=N&lt;br /&gt;
* ''aname'' = selects a specific atom in reference object and to calculate distances from one individual atom&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
example #1&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
distancesRH 2WHH, 25, 3.2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Will show distances between all atoms of residue 25 in 2WHH and any atom within 3.2 Å and return the result on screen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
example #2&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
distancesRH 1LVM, 151, 3, B, P, Y, Y, N&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Will show distances between N of residue 151 in chain B of 1LVM and all atoms within 3 Å. Distances are limited to atoms that can form hydrogen bonds and will be printed in &amp;quot;dist_rH_151_N.txt&amp;quot;. Dist objects will be shown in pymol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Notes, Further Developments and Requests ==&lt;br /&gt;
* This script works with visible objects&lt;br /&gt;
* As it is intended to be user-friendly more than fast, this script is not suitable to calculate distances between large objects. Use [[Quick_dist]] instead.&lt;br /&gt;
* '''request #1''': a version that handles multiple states&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Code ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from pymol import cmd, stored, math&lt;br /&gt;
	&lt;br /&gt;
def distancesRH (obj, ref, dist, chain=0, output=&amp;quot;S&amp;quot;, show=&amp;quot;N&amp;quot;, Hbonds=&amp;quot;N&amp;quot;, aname=&amp;quot;*&amp;quot;):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;	&lt;br /&gt;
	usage: distancesRH obj, ref, dist, [chain, [output S/P/N, [show Y/N, [Hbonds Y/N, [aname]]]]]&lt;br /&gt;
	&lt;br /&gt;
	obj: object name, ref:reference aa, dist: radius in A, chain: selected chain&lt;br /&gt;
	output: accepts S (screen), P (print) or N (none), default=S&lt;br /&gt;
	show: shows distances in pymol window, default=N&lt;br /&gt;
	Hbonds: restricts results to atoms that can form Hbonds, default=N&lt;br /&gt;
	aname: name of a specific atom in ref (to calculate distances from one atom only)&lt;br /&gt;
		&lt;br /&gt;
	example: distancesRH 2WHH, 25, 3.2, [B, [S, [N, [Y, [CB]]]]]&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	print &amp;quot;&amp;quot;&lt;br /&gt;
	#delete previous selections and displayed distances&lt;br /&gt;
	cmd.delete (&amp;quot;dist*&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Atoms&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Residues&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Reference&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Hbonds&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;RefAtom&amp;quot;)&lt;br /&gt;
	#creates and names selections	&lt;br /&gt;
	if chain==0: cen=obj&lt;br /&gt;
	else: cen=obj+&amp;quot; and chain &amp;quot;+chain&lt;br /&gt;
	refA=&amp;quot; and resi &amp;quot;+ref+&amp;quot; and name &amp;quot;+aname&lt;br /&gt;
	cmd.select(&amp;quot;Reference&amp;quot;, &amp;quot;byres &amp;quot;+cen+refA)&lt;br /&gt;
	m1=cmd.get_model (&amp;quot;Reference&amp;quot;)&lt;br /&gt;
	if aname!=&amp;quot;*&amp;quot;:&lt;br /&gt;
		cmd.select(&amp;quot;RefAtom&amp;quot;, cen+refA)&lt;br /&gt;
		m1=cmd.get_model (&amp;quot;RefAtom&amp;quot;)&lt;br /&gt;
	cmd.select(&amp;quot;Atoms&amp;quot;, cen+refA+&amp;quot; around &amp;quot;+str(dist)+&amp;quot; and not resi &amp;quot;+ref+&amp;quot; and &amp;quot;+cen)&lt;br /&gt;
	cmd.show(&amp;quot;nb_spheres&amp;quot;, &amp;quot;(Atoms or Reference) and (resn HOH or HET)&amp;quot;)&lt;br /&gt;
	cmd.select(&amp;quot;Residues&amp;quot;, &amp;quot;byres Atoms&amp;quot;)&lt;br /&gt;
	m2=cmd.get_model(&amp;quot;Atoms and visible&amp;quot;)	&lt;br /&gt;
	if Hbonds==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		cmd.select(&amp;quot;__Hbonds1&amp;quot;, &amp;quot;Reference and not symbol c&amp;quot;)&lt;br /&gt;
		if aname!=&amp;quot;*&amp;quot;:&lt;br /&gt;
			cmd.select(&amp;quot;__Hbonds1&amp;quot;, &amp;quot;RefAtom and not symbol c&amp;quot;)&lt;br /&gt;
		cmd.select(&amp;quot;__Hbonds2&amp;quot;, &amp;quot;Atoms and not symbol c&amp;quot;)&lt;br /&gt;
		cmd.select(&amp;quot;Hbonds&amp;quot;, &amp;quot;__Hbonds1 or __Hbonds2&amp;quot;)&lt;br /&gt;
		cmd.show(&amp;quot;lines&amp;quot;, &amp;quot;Hbonds&amp;quot;)&lt;br /&gt;
		m1=cmd.get_model (&amp;quot;__Hbonds1&amp;quot;)&lt;br /&gt;
		m2=cmd.get_model (&amp;quot;__Hbonds2 and visible&amp;quot;)	&lt;br /&gt;
	&lt;br /&gt;
	#controllers	&lt;br /&gt;
	if (not (output==&amp;quot;S&amp;quot; or output==&amp;quot;N&amp;quot; or output==&amp;quot;P&amp;quot;)) or (not (show==&amp;quot;Y&amp;quot; or show==&amp;quot;N&amp;quot;)) or (not (Hbonds==&amp;quot;Y&amp;quot; or Hbonds==&amp;quot;N&amp;quot;)):&lt;br /&gt;
		print &amp;quot;Malformed input, please try again&amp;quot;&lt;br /&gt;
		return&lt;br /&gt;
	abort=1&lt;br /&gt;
	abort2=0&lt;br /&gt;
	mc=cmd.get_model(cen)&lt;br /&gt;
	for c0 in range(len(mc.atom)):&lt;br /&gt;
		if mc.atom[c0].resi==ref: abort=0&lt;br /&gt;
	mc2=cmd.get_model(cen+refA)&lt;br /&gt;
	if aname!=&amp;quot;*&amp;quot;:&lt;br /&gt;
		abort2=1&lt;br /&gt;
		for c00 in range (len(mc2.atom)):	&lt;br /&gt;
			if mc2.atom[c00].name==aname: abort2=0&lt;br /&gt;
	if Hbonds==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		if aname[0]==&amp;quot;C&amp;quot;:&lt;br /&gt;
			print &amp;quot;Warning: no atoms in the selection can form H-bonds&amp;quot;&lt;br /&gt;
			return&lt;br /&gt;
	if abort==1: print &amp;quot;Warning: no such residue in the reference object&amp;quot;&lt;br /&gt;
	if abort2==1: &lt;br /&gt;
		if abort==0: print &amp;quot;Warning: no such atom in the reference object&amp;quot;&lt;br /&gt;
	if abort==1 or abort2==1: return&lt;br /&gt;
&lt;br /&gt;
	#measures distances&lt;br /&gt;
	distance2=[]&lt;br /&gt;
	distances=[]&lt;br /&gt;
	screenOP=&amp;quot;&amp;quot;	&lt;br /&gt;
	fileOP=&amp;quot;&amp;quot;&lt;br /&gt;
	for c1 in range(len(m1.atom)):&lt;br /&gt;
		for c2 in range(len(m2.atom)):&lt;br /&gt;
			if math.sqrt(sum(map(lambda f: (f[0]-f[1])**2, zip(m1.atom[c1].coord,m2.atom[c2].coord))))&amp;lt;float(dist):&lt;br /&gt;
				distance=cmd.distance (obj+&amp;quot;//&amp;quot;+m1.atom[c1].chain+&amp;quot;/&amp;quot;+m1.atom[c1].resi+&amp;quot;/&amp;quot;+m1.atom[c1].name, obj+&amp;quot;//&amp;quot;+m2.atom[c2].chain+&amp;quot;/&amp;quot;+m2.atom[c2].resi+&amp;quot;/&amp;quot;+m2.atom[c2].name)&lt;br /&gt;
				distances.append(distance)&lt;br /&gt;
				screenOP+=&amp;quot;%s/%s/%s/%s to %s/%s/%s/%s: %.3f\n&amp;quot; % (m1.atom[c1].chain,m1.atom[c1].resn,m1.atom[c1].resi,m1.atom[c1].name,m2.atom[c2].chain,m2.atom[c2].resn,m2.atom[c2].resi,m2.atom[c2].name, distance)&lt;br /&gt;
				fileOP+=&amp;quot;%s/%s/%s/%s\t\t\t%s/%s/%s/%s\t\t\t\t%.5f\n&amp;quot;%  (m1.atom[c1].chain,m1.atom[c1].resn,m1.atom[c1].resi,m1.atom[c1].name,m2.atom[c2].chain,m2.atom[c2].resn,m2.atom[c2].resi,m2.atom[c2].name, distance)	&lt;br /&gt;
	#last controller&lt;br /&gt;
	if len(distances)==0:&lt;br /&gt;
		if abort2==0:&lt;br /&gt;
			print &amp;quot;Warning: no atoms within the selected range&amp;quot;&lt;br /&gt;
		return&lt;br /&gt;
&lt;br /&gt;
	#data outputs&lt;br /&gt;
	if output==&amp;quot;N&amp;quot;: print &amp;quot;Data recorded, but not printed&amp;quot;&lt;br /&gt;
	if output==&amp;quot;S&amp;quot;:&lt;br /&gt;
		print &amp;quot;Distance of atoms in &amp;quot;+obj+&amp;quot;/&amp;quot;+ref+&amp;quot;/&amp;quot;+aname+&amp;quot; to all atoms within &amp;quot;+dist+&amp;quot; Angstroms&amp;quot;&lt;br /&gt;
		if Hbonds==&amp;quot;Y&amp;quot;: print &amp;quot;Distances restricted to potential H-bond pairs&amp;quot;&lt;br /&gt;
		print screenOP	&lt;br /&gt;
	if output==&amp;quot;P&amp;quot;:&lt;br /&gt;
		print 'data printed in &amp;quot;distances_rH_'+ref+'-'+aname+'.txt&amp;quot; file'&lt;br /&gt;
		f=open('distances_rH_'+ref+'-'+aname+'.txt','w')&lt;br /&gt;
		f.write(&amp;quot;Pairwise distances betweet atoms in %s and all atoms within %s Angstroms\n&amp;quot; % (obj+&amp;quot;/&amp;quot;+ref+&amp;quot;/&amp;quot;+aname, dist))&lt;br /&gt;
		if Hbonds==&amp;quot;Y&amp;quot;: f.write(&amp;quot;Distances restricted to potential H-bond pairs\n&amp;quot;)&lt;br /&gt;
		f.write(&amp;quot;Atom in reference\tAtom in destination\t\tdistance\n&amp;quot;)&lt;br /&gt;
		f.write(fileOP)&lt;br /&gt;
		f.close()&lt;br /&gt;
	print &amp;quot;All done! Good luck with your data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	#graphical output&lt;br /&gt;
	if show==&amp;quot;N&amp;quot;: cmd.delete (&amp;quot;dist*&amp;quot;)&lt;br /&gt;
	if show==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		cmd.show(&amp;quot;lines&amp;quot;, &amp;quot;Reference&amp;quot;)&lt;br /&gt;
		cmd.show(&amp;quot;lines&amp;quot;, &amp;quot;Residues&amp;quot;)&lt;br /&gt;
				&lt;br /&gt;
cmd.extend(&amp;quot;distancesRH&amp;quot;, distancesRH);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Script_Library]]&lt;br /&gt;
[[Category:ObjSel_Scripts]]&lt;br /&gt;
[[Category:Biochemical_Scripts]]&lt;br /&gt;
[[Category:Structural_Biology_Scripts]]&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=User:PietroGattiLafranconi&amp;diff=3053</id>
		<title>User:PietroGattiLafranconi</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=User:PietroGattiLafranconi&amp;diff=3053"/>
		<updated>2013-01-03T14:10:29Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Is new to PyMOLWiki&lt;br /&gt;
* Recently submitted [[DistancesRH]]&lt;br /&gt;
* Will be happy to receive feedbacks/suggestions&lt;br /&gt;
* Wonders if [[DistancesRH]] is worth uploading in [[Pymol-script-repo]]&lt;br /&gt;
* can be found [http://www.bio.cam.ac.uk/~fhlab/members/pg356.shtml here]&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=User:PietroGattiLafranconi&amp;diff=3052</id>
		<title>User:PietroGattiLafranconi</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=User:PietroGattiLafranconi&amp;diff=3052"/>
		<updated>2013-01-02T16:37:13Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: Created page with &amp;quot;* Is new to PyMOLWiki * Recently submitted DistancesRH * Will be happy to receive feedbacks/suggestions * Wonders if DistancesRH is worth uploading in Pymol-script-repo&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;* Is new to PyMOLWiki&lt;br /&gt;
* Recently submitted [[DistancesRH]]&lt;br /&gt;
* Will be happy to receive feedbacks/suggestions&lt;br /&gt;
* Wonders if [[DistancesRH]] is worth uploading in [[Pymol-script-repo]]&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=DistancesRH&amp;diff=5416</id>
		<title>DistancesRH</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=DistancesRH&amp;diff=5416"/>
		<updated>2013-01-02T16:32:05Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox script-repo&lt;br /&gt;
|type      = script&lt;br /&gt;
|download  = &lt;br /&gt;
|author    = [[User:PietroGattiLafranconi|Pietro Gatti-Lafranconi]]&lt;br /&gt;
|license   = [http://creativecommons.org/licenses/by-nc-sa/3.0 CC BY-NC-SA]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Given an object, a reference amino acid and a radius, this scripts calculates pairwise distances between atom(s) in the reference and all atoms that fall within the given range.&lt;br /&gt;
&lt;br /&gt;
The script is intended to provide a range of useful tools while requiring minimal coding skills (i.e. it is not optimised for efficiency).&lt;br /&gt;
&lt;br /&gt;
By changing input parameters it is possible to:&lt;br /&gt;
* choose the output (none, on screen, on file)&lt;br /&gt;
* measure distances from one single atom&lt;br /&gt;
* display distance objects in pymol&lt;br /&gt;
* restrict distances between hydrogen-bond forming atoms only&lt;br /&gt;
&lt;br /&gt;
The script also runs a number of controls to verify that inputs and outputs exists/are suitable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
 distancesRH obj, ref, dist, [chain, [output S/P/N, [show Y/N, [Hbonds Y/N, [aname]]]]]&lt;br /&gt;
&lt;br /&gt;
'''Note #1:''' the selected molecule must be visible.&lt;br /&gt;
&lt;br /&gt;
'''Note #2:''' soon a version that handles multiple states.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Required Arguments ==&lt;br /&gt;
&lt;br /&gt;
* '''obj''' = object name&lt;br /&gt;
* '''ref''' = reference amino acid id&lt;br /&gt;
* '''dist''' = radius in Angstroms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Optional Arguments ==&lt;br /&gt;
* ''chain'' = selected chain&lt;br /&gt;
* ''output'' = accepts S (screen), P (print) or N (none), default=S&lt;br /&gt;
* ''show'' = shows distances in pymol window, default=N&lt;br /&gt;
* ''Hbonds'' = restricts results to atoms that can form Hbonds, default=N&lt;br /&gt;
* ''aname'' = selects a specific atom in reference object and to calculate distances from one individual atom&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
example #1&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
distancesRH 2WHH, 25, 3.2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Will show distances between all atoms of residue 25 in 2WHH and any atom within 3.2 Å and return the result on screen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
example #2&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
distancesRH 1LVM, 151, 3, B, P, Y, Y, N&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Will show distances between CB of residue 151 in chain B of 1LVM and all atoms within 3 Å. Distances are limited to atoms that can form hydrogen bonds and will be printed in &amp;quot;dist_rH_151_N.txt&amp;quot;. Dist objects will be shown in pymol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Code ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from pymol import cmd, stored, math&lt;br /&gt;
	&lt;br /&gt;
def distancesRH (obj, ref, dist, chain=0, output=&amp;quot;S&amp;quot;, show=&amp;quot;N&amp;quot;, Hbonds=&amp;quot;N&amp;quot;, aname=&amp;quot;*&amp;quot;):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;	&lt;br /&gt;
	usage: distancesRH obj, ref, dist, [chain, [output S/P/N, [show Y/N, [Hbonds Y/N, [aname]]]]]&lt;br /&gt;
	&lt;br /&gt;
	obj: object name, ref:reference aa, dist: radius in A, chain: selected chain&lt;br /&gt;
	output: accepts S (screen), P (print) or N (none), default=S&lt;br /&gt;
	show: shows distances in pymol window, default=N&lt;br /&gt;
	Hbonds: restricts results to atoms that can form Hbonds, default=N&lt;br /&gt;
	aname: name of a specific atom in ref (to calculate distances from one atom only)&lt;br /&gt;
		&lt;br /&gt;
	example: distancesRH 2WHH, 25, 3.2, [B, [S, [N, [Y, [CB]]]]]&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	print &amp;quot;&amp;quot;&lt;br /&gt;
	#delete previous selections and displayed distances&lt;br /&gt;
	cmd.delete (&amp;quot;dist*&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Atoms&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Residues&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Reference&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Hbonds&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;RefAtom&amp;quot;)&lt;br /&gt;
	#creates and names selections	&lt;br /&gt;
	if chain==0: cen=obj&lt;br /&gt;
	else: cen=obj+&amp;quot; and chain &amp;quot;+chain&lt;br /&gt;
	refA=&amp;quot; and resi &amp;quot;+ref+&amp;quot; and name &amp;quot;+aname&lt;br /&gt;
	cmd.select(&amp;quot;Reference&amp;quot;, &amp;quot;byres &amp;quot;+cen+refA)&lt;br /&gt;
	m1=cmd.get_model (&amp;quot;Reference&amp;quot;)&lt;br /&gt;
	if aname!=&amp;quot;*&amp;quot;:&lt;br /&gt;
		cmd.select(&amp;quot;RefAtom&amp;quot;, cen+refA)&lt;br /&gt;
		m1=cmd.get_model (&amp;quot;RefAtom&amp;quot;)&lt;br /&gt;
	cmd.select(&amp;quot;Atoms&amp;quot;, cen+refA+&amp;quot; around &amp;quot;+str(dist)+&amp;quot; and not resi &amp;quot;+ref+&amp;quot; and &amp;quot;+cen)&lt;br /&gt;
	cmd.show(&amp;quot;nb_spheres&amp;quot;, &amp;quot;(Atoms or Reference) and (resn HOH or HET)&amp;quot;)&lt;br /&gt;
	cmd.select(&amp;quot;Residues&amp;quot;, &amp;quot;byres Atoms&amp;quot;)&lt;br /&gt;
	m2=cmd.get_model(&amp;quot;Atoms and visible&amp;quot;)	&lt;br /&gt;
	if Hbonds==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		cmd.select(&amp;quot;__Hbonds1&amp;quot;, &amp;quot;Reference and not symbol c&amp;quot;)&lt;br /&gt;
		if aname!=&amp;quot;*&amp;quot;:&lt;br /&gt;
			cmd.select(&amp;quot;__Hbonds1&amp;quot;, &amp;quot;RefAtom and not symbol c&amp;quot;)&lt;br /&gt;
		cmd.select(&amp;quot;__Hbonds2&amp;quot;, &amp;quot;Atoms and not symbol c&amp;quot;)&lt;br /&gt;
		cmd.select(&amp;quot;Hbonds&amp;quot;, &amp;quot;__Hbonds1 or __Hbonds2&amp;quot;)&lt;br /&gt;
		cmd.show(&amp;quot;lines&amp;quot;, &amp;quot;Hbonds&amp;quot;)&lt;br /&gt;
		m1=cmd.get_model (&amp;quot;__Hbonds1&amp;quot;)&lt;br /&gt;
		m2=cmd.get_model (&amp;quot;__Hbonds2 and visible&amp;quot;)	&lt;br /&gt;
	&lt;br /&gt;
	#controllers	&lt;br /&gt;
	if (not (output==&amp;quot;S&amp;quot; or output==&amp;quot;N&amp;quot; or output==&amp;quot;P&amp;quot;)) or (not (show==&amp;quot;Y&amp;quot; or show==&amp;quot;N&amp;quot;)) or (not (Hbonds==&amp;quot;Y&amp;quot; or Hbonds==&amp;quot;N&amp;quot;)):&lt;br /&gt;
		print &amp;quot;Malformed input, please try again&amp;quot;&lt;br /&gt;
		return&lt;br /&gt;
	abort=1&lt;br /&gt;
	abort2=0&lt;br /&gt;
	mc=cmd.get_model(cen)&lt;br /&gt;
	for c0 in range(len(mc.atom)):&lt;br /&gt;
		if mc.atom[c0].resi==ref: abort=0&lt;br /&gt;
	mc2=cmd.get_model(cen+refA)&lt;br /&gt;
	if aname!=&amp;quot;*&amp;quot;:&lt;br /&gt;
		abort2=1&lt;br /&gt;
		for c00 in range (len(mc2.atom)):	&lt;br /&gt;
			if mc2.atom[c00].name==aname: abort2=0&lt;br /&gt;
	if Hbonds==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		if aname[0]==&amp;quot;C&amp;quot;:&lt;br /&gt;
			print &amp;quot;Warning: no atoms in the selection can form H-bonds&amp;quot;&lt;br /&gt;
			return&lt;br /&gt;
	if abort==1: print &amp;quot;Warning: no such residue in the reference object&amp;quot;&lt;br /&gt;
	if abort2==1: &lt;br /&gt;
		if abort==0: print &amp;quot;Warning: no such atom in the reference object&amp;quot;&lt;br /&gt;
	if abort==1 or abort2==1: return&lt;br /&gt;
&lt;br /&gt;
	#measures distances&lt;br /&gt;
	distance2=[]&lt;br /&gt;
	distances=[]&lt;br /&gt;
	screenOP=&amp;quot;&amp;quot;	&lt;br /&gt;
	fileOP=&amp;quot;&amp;quot;&lt;br /&gt;
	for c1 in range(len(m1.atom)):&lt;br /&gt;
		for c2 in range(len(m2.atom)):&lt;br /&gt;
			if math.sqrt(sum(map(lambda f: (f[0]-f[1])**2, zip(m1.atom[c1].coord,m2.atom[c2].coord))))&amp;lt;float(dist):&lt;br /&gt;
				distance=cmd.distance (obj+&amp;quot;//&amp;quot;+m1.atom[c1].chain+&amp;quot;/&amp;quot;+m1.atom[c1].resi+&amp;quot;/&amp;quot;+m1.atom[c1].name, obj+&amp;quot;//&amp;quot;+m2.atom[c2].chain+&amp;quot;/&amp;quot;+m2.atom[c2].resi+&amp;quot;/&amp;quot;+m2.atom[c2].name)&lt;br /&gt;
				distances.append(distance)&lt;br /&gt;
				screenOP+=&amp;quot;%s/%s/%s/%s to %s/%s/%s/%s: %.3f\n&amp;quot; % (m1.atom[c1].chain,m1.atom[c1].resn,m1.atom[c1].resi,m1.atom[c1].name,m2.atom[c2].chain,m2.atom[c2].resn,m2.atom[c2].resi,m2.atom[c2].name, distance)&lt;br /&gt;
				fileOP+=&amp;quot;%s/%s/%s/%s\t\t\t%s/%s/%s/%s\t\t\t\t%.5f\n&amp;quot;%  (m1.atom[c1].chain,m1.atom[c1].resn,m1.atom[c1].resi,m1.atom[c1].name,m2.atom[c2].chain,m2.atom[c2].resn,m2.atom[c2].resi,m2.atom[c2].name, distance)	&lt;br /&gt;
	#last controller&lt;br /&gt;
	if len(distances)==0:&lt;br /&gt;
		if abort2==0:&lt;br /&gt;
			print &amp;quot;Warning: no atoms within the selected range&amp;quot;&lt;br /&gt;
		return&lt;br /&gt;
&lt;br /&gt;
	#data outputs&lt;br /&gt;
	if output==&amp;quot;N&amp;quot;: print &amp;quot;Data recorded, but not printed&amp;quot;&lt;br /&gt;
	if output==&amp;quot;S&amp;quot;:&lt;br /&gt;
		print &amp;quot;Distance of atoms in &amp;quot;+obj+&amp;quot;/&amp;quot;+ref+&amp;quot;/&amp;quot;+aname+&amp;quot; to all atoms within &amp;quot;+dist+&amp;quot; Angstroms&amp;quot;&lt;br /&gt;
		if Hbonds==&amp;quot;Y&amp;quot;: print &amp;quot;Distances restricted to potential H-bond pairs&amp;quot;&lt;br /&gt;
		print screenOP	&lt;br /&gt;
	if output==&amp;quot;P&amp;quot;:&lt;br /&gt;
		print 'data printed in &amp;quot;distances_rH_'+ref+'-'+aname+'.txt&amp;quot; file'&lt;br /&gt;
		f=open('distances_rH_'+ref+'-'+aname+'.txt','w')&lt;br /&gt;
		f.write(&amp;quot;Pairwise distances betweet atoms in %s and all atoms within %s Angstroms\n&amp;quot; % (obj+&amp;quot;/&amp;quot;+ref+&amp;quot;/&amp;quot;+aname, dist))&lt;br /&gt;
		if Hbonds==&amp;quot;Y&amp;quot;: f.write(&amp;quot;Distances restricted to potential H-bond pairs\n&amp;quot;)&lt;br /&gt;
		f.write(&amp;quot;Atom in reference\tAtom in destination\t\tdistance\n&amp;quot;)&lt;br /&gt;
		f.write(fileOP)&lt;br /&gt;
		f.close()&lt;br /&gt;
	print &amp;quot;All done! Good luck with your data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	#graphical output&lt;br /&gt;
	if show==&amp;quot;N&amp;quot;: cmd.delete (&amp;quot;dist*&amp;quot;)&lt;br /&gt;
	if show==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		cmd.show(&amp;quot;lines&amp;quot;, &amp;quot;Reference&amp;quot;)&lt;br /&gt;
		cmd.show(&amp;quot;lines&amp;quot;, &amp;quot;Residues&amp;quot;)&lt;br /&gt;
				&lt;br /&gt;
cmd.extend(&amp;quot;distancesRH&amp;quot;, distancesRH);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Script_Library]]&lt;br /&gt;
[[Category:ObjSel_Scripts]]&lt;br /&gt;
[[Category:Biochemical_Scripts]]&lt;br /&gt;
[[Category:Structural_Biology_Scripts]]&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
	<entry>
		<id>https://wiki.pymol.org/index.php?title=DistancesRH&amp;diff=5415</id>
		<title>DistancesRH</title>
		<link rel="alternate" type="text/html" href="https://wiki.pymol.org/index.php?title=DistancesRH&amp;diff=5415"/>
		<updated>2013-01-02T16:31:19Z</updated>

		<summary type="html">&lt;p&gt;PietroGattiLafranconi: Created page with &amp;quot;{{Infobox script-repo |type      = script |download  =  |author    = Pietro Gatti-Lafranconi |license   = [http://creativecommons.org/licenses/by-n...&amp;quot;&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;{{Infobox script-repo&lt;br /&gt;
|type      = script&lt;br /&gt;
|download  = &lt;br /&gt;
|author    = [[User:PietroGattiLafranconi|Pietro Gatti-Lafranconi]]&lt;br /&gt;
|license   = [http://creativecommons.org/licenses/by-nc-sa/3.0 CC BY-NC-SA]&lt;br /&gt;
}}&lt;br /&gt;
&lt;br /&gt;
== Introduction ==&lt;br /&gt;
Given an object, a reference amino acid and a radius, this scripts calculates pairwise distances between atom(s) in the reference and all atoms that fall within the given range.&lt;br /&gt;
&lt;br /&gt;
The script is intended to provide a range of useful tools while requiring minimal coding skills (i.e. it is not optimised for efficiency).&lt;br /&gt;
&lt;br /&gt;
By changing input parameters it is possible to:&lt;br /&gt;
* choose the output (none, on screen, on file)&lt;br /&gt;
* measure distances from one single atom&lt;br /&gt;
* display distance objects in pymol&lt;br /&gt;
* restrict distances between hydrogen-bond forming atoms only&lt;br /&gt;
&lt;br /&gt;
The script also runs a number of controls to verify that inputs and outputs exists/are suitable.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Usage ==&lt;br /&gt;
&lt;br /&gt;
 distancesRH obj, ref, dist, [chain, [output S/P/N, [show Y/N, [Hbonds Y/N, [aname]]]]]&lt;br /&gt;
&lt;br /&gt;
'''Note #1:''' the selected molecule must be visible.&lt;br /&gt;
'''Note #2:''' soon a version that manages multiple states.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Required Arguments ==&lt;br /&gt;
&lt;br /&gt;
* '''obj''' = object name&lt;br /&gt;
* '''ref''' = reference amino acid id&lt;br /&gt;
* '''dist''' = radius in Angstroms&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Optional Arguments ==&lt;br /&gt;
* ''chain'' = selected chain&lt;br /&gt;
* ''output'' = accepts S (screen), P (print) or N (none), default=S&lt;br /&gt;
* ''show'' = shows distances in pymol window, default=N&lt;br /&gt;
* ''Hbonds'' = restricts results to atoms that can form Hbonds, default=N&lt;br /&gt;
* ''aname'' = selects a specific atom in reference object and to calculate distances from one individual atom&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== Examples ==&lt;br /&gt;
example #1&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
distancesRH 2WHH, 25, 3.2&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Will show distances between all atoms of residue 25 in 2WHH and any atom within 3.2 Å and return the result on screen.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
example #2&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
distancesRH 1LVM, 151, 3, B, P, Y, Y, N&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
Will show distances between CB of residue 151 in chain B of 1LVM and all atoms within 3 Å. Distances are limited to atoms that can form hydrogen bonds and will be printed in &amp;quot;dist_rH_151_N.txt&amp;quot;. Dist objects will be shown in pymol.&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
== The Code ==&lt;br /&gt;
&amp;lt;source lang=&amp;quot;python&amp;quot;&amp;gt;&lt;br /&gt;
&lt;br /&gt;
from pymol import cmd, stored, math&lt;br /&gt;
	&lt;br /&gt;
def distancesRH (obj, ref, dist, chain=0, output=&amp;quot;S&amp;quot;, show=&amp;quot;N&amp;quot;, Hbonds=&amp;quot;N&amp;quot;, aname=&amp;quot;*&amp;quot;):&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;	&lt;br /&gt;
	usage: distancesRH obj, ref, dist, [chain, [output S/P/N, [show Y/N, [Hbonds Y/N, [aname]]]]]&lt;br /&gt;
	&lt;br /&gt;
	obj: object name, ref:reference aa, dist: radius in A, chain: selected chain&lt;br /&gt;
	output: accepts S (screen), P (print) or N (none), default=S&lt;br /&gt;
	show: shows distances in pymol window, default=N&lt;br /&gt;
	Hbonds: restricts results to atoms that can form Hbonds, default=N&lt;br /&gt;
	aname: name of a specific atom in ref (to calculate distances from one atom only)&lt;br /&gt;
		&lt;br /&gt;
	example: distancesRH 2WHH, 25, 3.2, [B, [S, [N, [Y, [CB]]]]]&lt;br /&gt;
	&amp;quot;&amp;quot;&amp;quot;&lt;br /&gt;
	print &amp;quot;&amp;quot;&lt;br /&gt;
	#delete previous selections and displayed distances&lt;br /&gt;
	cmd.delete (&amp;quot;dist*&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Atoms&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Residues&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Reference&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;Hbonds&amp;quot;)&lt;br /&gt;
	cmd.delete (&amp;quot;RefAtom&amp;quot;)&lt;br /&gt;
	#creates and names selections	&lt;br /&gt;
	if chain==0: cen=obj&lt;br /&gt;
	else: cen=obj+&amp;quot; and chain &amp;quot;+chain&lt;br /&gt;
	refA=&amp;quot; and resi &amp;quot;+ref+&amp;quot; and name &amp;quot;+aname&lt;br /&gt;
	cmd.select(&amp;quot;Reference&amp;quot;, &amp;quot;byres &amp;quot;+cen+refA)&lt;br /&gt;
	m1=cmd.get_model (&amp;quot;Reference&amp;quot;)&lt;br /&gt;
	if aname!=&amp;quot;*&amp;quot;:&lt;br /&gt;
		cmd.select(&amp;quot;RefAtom&amp;quot;, cen+refA)&lt;br /&gt;
		m1=cmd.get_model (&amp;quot;RefAtom&amp;quot;)&lt;br /&gt;
	cmd.select(&amp;quot;Atoms&amp;quot;, cen+refA+&amp;quot; around &amp;quot;+str(dist)+&amp;quot; and not resi &amp;quot;+ref+&amp;quot; and &amp;quot;+cen)&lt;br /&gt;
	cmd.show(&amp;quot;nb_spheres&amp;quot;, &amp;quot;(Atoms or Reference) and (resn HOH or HET)&amp;quot;)&lt;br /&gt;
	cmd.select(&amp;quot;Residues&amp;quot;, &amp;quot;byres Atoms&amp;quot;)&lt;br /&gt;
	m2=cmd.get_model(&amp;quot;Atoms and visible&amp;quot;)	&lt;br /&gt;
	if Hbonds==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		cmd.select(&amp;quot;__Hbonds1&amp;quot;, &amp;quot;Reference and not symbol c&amp;quot;)&lt;br /&gt;
		if aname!=&amp;quot;*&amp;quot;:&lt;br /&gt;
			cmd.select(&amp;quot;__Hbonds1&amp;quot;, &amp;quot;RefAtom and not symbol c&amp;quot;)&lt;br /&gt;
		cmd.select(&amp;quot;__Hbonds2&amp;quot;, &amp;quot;Atoms and not symbol c&amp;quot;)&lt;br /&gt;
		cmd.select(&amp;quot;Hbonds&amp;quot;, &amp;quot;__Hbonds1 or __Hbonds2&amp;quot;)&lt;br /&gt;
		cmd.show(&amp;quot;lines&amp;quot;, &amp;quot;Hbonds&amp;quot;)&lt;br /&gt;
		m1=cmd.get_model (&amp;quot;__Hbonds1&amp;quot;)&lt;br /&gt;
		m2=cmd.get_model (&amp;quot;__Hbonds2 and visible&amp;quot;)	&lt;br /&gt;
	&lt;br /&gt;
	#controllers	&lt;br /&gt;
	if (not (output==&amp;quot;S&amp;quot; or output==&amp;quot;N&amp;quot; or output==&amp;quot;P&amp;quot;)) or (not (show==&amp;quot;Y&amp;quot; or show==&amp;quot;N&amp;quot;)) or (not (Hbonds==&amp;quot;Y&amp;quot; or Hbonds==&amp;quot;N&amp;quot;)):&lt;br /&gt;
		print &amp;quot;Malformed input, please try again&amp;quot;&lt;br /&gt;
		return&lt;br /&gt;
	abort=1&lt;br /&gt;
	abort2=0&lt;br /&gt;
	mc=cmd.get_model(cen)&lt;br /&gt;
	for c0 in range(len(mc.atom)):&lt;br /&gt;
		if mc.atom[c0].resi==ref: abort=0&lt;br /&gt;
	mc2=cmd.get_model(cen+refA)&lt;br /&gt;
	if aname!=&amp;quot;*&amp;quot;:&lt;br /&gt;
		abort2=1&lt;br /&gt;
		for c00 in range (len(mc2.atom)):	&lt;br /&gt;
			if mc2.atom[c00].name==aname: abort2=0&lt;br /&gt;
	if Hbonds==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		if aname[0]==&amp;quot;C&amp;quot;:&lt;br /&gt;
			print &amp;quot;Warning: no atoms in the selection can form H-bonds&amp;quot;&lt;br /&gt;
			return&lt;br /&gt;
	if abort==1: print &amp;quot;Warning: no such residue in the reference object&amp;quot;&lt;br /&gt;
	if abort2==1: &lt;br /&gt;
		if abort==0: print &amp;quot;Warning: no such atom in the reference object&amp;quot;&lt;br /&gt;
	if abort==1 or abort2==1: return&lt;br /&gt;
&lt;br /&gt;
	#measures distances&lt;br /&gt;
	distance2=[]&lt;br /&gt;
	distances=[]&lt;br /&gt;
	screenOP=&amp;quot;&amp;quot;	&lt;br /&gt;
	fileOP=&amp;quot;&amp;quot;&lt;br /&gt;
	for c1 in range(len(m1.atom)):&lt;br /&gt;
		for c2 in range(len(m2.atom)):&lt;br /&gt;
			if math.sqrt(sum(map(lambda f: (f[0]-f[1])**2, zip(m1.atom[c1].coord,m2.atom[c2].coord))))&amp;lt;float(dist):&lt;br /&gt;
				distance=cmd.distance (obj+&amp;quot;//&amp;quot;+m1.atom[c1].chain+&amp;quot;/&amp;quot;+m1.atom[c1].resi+&amp;quot;/&amp;quot;+m1.atom[c1].name, obj+&amp;quot;//&amp;quot;+m2.atom[c2].chain+&amp;quot;/&amp;quot;+m2.atom[c2].resi+&amp;quot;/&amp;quot;+m2.atom[c2].name)&lt;br /&gt;
				distances.append(distance)&lt;br /&gt;
				screenOP+=&amp;quot;%s/%s/%s/%s to %s/%s/%s/%s: %.3f\n&amp;quot; % (m1.atom[c1].chain,m1.atom[c1].resn,m1.atom[c1].resi,m1.atom[c1].name,m2.atom[c2].chain,m2.atom[c2].resn,m2.atom[c2].resi,m2.atom[c2].name, distance)&lt;br /&gt;
				fileOP+=&amp;quot;%s/%s/%s/%s\t\t\t%s/%s/%s/%s\t\t\t\t%.5f\n&amp;quot;%  (m1.atom[c1].chain,m1.atom[c1].resn,m1.atom[c1].resi,m1.atom[c1].name,m2.atom[c2].chain,m2.atom[c2].resn,m2.atom[c2].resi,m2.atom[c2].name, distance)	&lt;br /&gt;
	#last controller&lt;br /&gt;
	if len(distances)==0:&lt;br /&gt;
		if abort2==0:&lt;br /&gt;
			print &amp;quot;Warning: no atoms within the selected range&amp;quot;&lt;br /&gt;
		return&lt;br /&gt;
&lt;br /&gt;
	#data outputs&lt;br /&gt;
	if output==&amp;quot;N&amp;quot;: print &amp;quot;Data recorded, but not printed&amp;quot;&lt;br /&gt;
	if output==&amp;quot;S&amp;quot;:&lt;br /&gt;
		print &amp;quot;Distance of atoms in &amp;quot;+obj+&amp;quot;/&amp;quot;+ref+&amp;quot;/&amp;quot;+aname+&amp;quot; to all atoms within &amp;quot;+dist+&amp;quot; Angstroms&amp;quot;&lt;br /&gt;
		if Hbonds==&amp;quot;Y&amp;quot;: print &amp;quot;Distances restricted to potential H-bond pairs&amp;quot;&lt;br /&gt;
		print screenOP	&lt;br /&gt;
	if output==&amp;quot;P&amp;quot;:&lt;br /&gt;
		print 'data printed in &amp;quot;distances_rH_'+ref+'-'+aname+'.txt&amp;quot; file'&lt;br /&gt;
		f=open('distances_rH_'+ref+'-'+aname+'.txt','w')&lt;br /&gt;
		f.write(&amp;quot;Pairwise distances betweet atoms in %s and all atoms within %s Angstroms\n&amp;quot; % (obj+&amp;quot;/&amp;quot;+ref+&amp;quot;/&amp;quot;+aname, dist))&lt;br /&gt;
		if Hbonds==&amp;quot;Y&amp;quot;: f.write(&amp;quot;Distances restricted to potential H-bond pairs\n&amp;quot;)&lt;br /&gt;
		f.write(&amp;quot;Atom in reference\tAtom in destination\t\tdistance\n&amp;quot;)&lt;br /&gt;
		f.write(fileOP)&lt;br /&gt;
		f.close()&lt;br /&gt;
	print &amp;quot;All done! Good luck with your data&amp;quot;&lt;br /&gt;
&lt;br /&gt;
	#graphical output&lt;br /&gt;
	if show==&amp;quot;N&amp;quot;: cmd.delete (&amp;quot;dist*&amp;quot;)&lt;br /&gt;
	if show==&amp;quot;Y&amp;quot;:&lt;br /&gt;
		cmd.show(&amp;quot;lines&amp;quot;, &amp;quot;Reference&amp;quot;)&lt;br /&gt;
		cmd.show(&amp;quot;lines&amp;quot;, &amp;quot;Residues&amp;quot;)&lt;br /&gt;
				&lt;br /&gt;
cmd.extend(&amp;quot;distancesRH&amp;quot;, distancesRH);&lt;br /&gt;
&amp;lt;/source&amp;gt;&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;
[[Category:Script_Library]]&lt;br /&gt;
[[Category:ObjSel_Scripts]]&lt;br /&gt;
[[Category:Biochemical_Scripts]]&lt;br /&gt;
[[Category:Structural_Biology_Scripts]]&lt;/div&gt;</summary>
		<author><name>PietroGattiLafranconi</name></author>
	</entry>
</feed>