Cluster Count

From PyMOLWiki
Revision as of 06:30, 14 February 2013 by MartinChristen (talk | contribs) (New script to get statistics on b-factors ~~~~)
(diff) ← Older revision | Latest revision (diff) | Newer revision → (diff)
Jump to navigation Jump to search

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)