Cluster Count
Revision as of 07:30, 14 February 2013 by MartinChristen (talk | contribs) (New script to get statistics on b-factors ~~~~)
The printable version is no longer supported and may have rendering errors. Please update your browser bookmarks and please use the default browser print function instead.
Overview
This script calculates statistics on the B-values for all atoms in the selected object, prints the information on screen and appends it to a file called "cluster_count.txt".
Usage
cluster_count object
Example
cluster_count 1ubq
#output on screen:
Number of atoms in ' 1ubq ': 602
Minimum and Maximum B-values: 2.0 42.75
Average B-value: 13.4131063029
Standard deviation of the B-values: 8.70767140923
This data will be appended to cluster_count.txt
#output in file cluster_count.txt; the format is:
#objectname N minB maxB aveB stdevB
1ubq 602 2.000 42.750 13.413 8.708
The Code
# Script: cluster_count.py
# Copyleft 2010 Martin Christen
from pymol import cmd,stored
def cluster_count(selection):
"""
AUTHOR
Martin Christen
DESCRIPTION
This script calculates statistics on the B-values for all atoms in
the selected object, prints the information on screen and appends
it to the file "cluster_count.txt".
Output format on screen:
------------------------
Number of atoms in 'selection': 0
Minimum and Maximum B-values: 0.0
Average B-value : 0.0
Standard deviation of the B-values (best): 0.0 (0.0)
This data will be appended to cluster_count.txt
Output format in cluster_count.txt:
-----------------------------------
selection N minB maxB aveB stdevB
EXAMPLE
cluster_count 1ubq
Number of atoms in ' 1ubq ': 602
Minimum and Maximum B-values: 2.0 42.75
Average B-value: 13.4131063029
Standard deviation of the B-values: 8.70767140923
This data will be appended to cluster_count.txt
(in cluster_count.txt:)
1ubq 602 2.000 42.750 13.413 8.708
USAGE
cluster_count selection
"""
# get list of B-factors from selection
m = cmd.get_model(selection)
sel = []
b_list = []
dummy = []
for i in range(len(m.atom)):
b_list.append(m.atom[i].b)
#determine min and max
try: max_b = max(b_list)
except ValueError: max_b=0
try: min_b = min(b_list)
except ValueError: min_b=0
#determine average
try: average_b= float(sum(b_list)) / len(b_list)
except ZeroDivisionError: average_b=0
#determine standard deviation
for i in range(len(m.atom)):
if m.atom[i]>average_b:
dummy.append((m.atom[i].b-average_b)**2)
if m.atom[i]<average_b:
dummy.append((average_b-m.atom[i].b)**2)
try: stdev_b= (sum(dummy) / (len(m.atom)-1))**(1/2.0)
except ZeroDivisionError: stdev_b=0
#print values on screen
print "Number of atoms in '", selection,"': ", len(b_list)
print "Minimum and Maximum B-values: ", min_b, max_b
print "Average B-value: ", average_b
print "Standard deviation of the B-values: ", stdev_b
print "This data will be appended to cluster_count.txt"
#write information to cluster_count.txt
f=open('cluster_count.txt','a')
print >>f, '%-10s %8d %8.3f %8.3f %8.3f %8.3f' % (selection, len(m.atom), min_b, max_b, average_b, stdev_b)
f.close()
cmd.extend("cluster_count",cluster_count)