File: NOEtools.py

package info (click to toggle)
python-biopython 1.42-2
  • links: PTS
  • area: main
  • in suites: etch, etch-m68k
  • size: 17,584 kB
  • ctags: 12,272
  • sloc: python: 80,461; xml: 13,834; ansic: 7,902; cpp: 1,855; sql: 1,144; makefile: 203
file content (75 lines) | stat: -rw-r--r-- 2,727 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
# NOEtools.py: A python module for predicting NOE coordinates from
#                assignment data.  
#
#    The input and output are modelled on nmrview peaklists.
#    This modules is suitable for directly generating an nmrview
#    peaklist with predicted crosspeaks directly from the
#    input assignment peaklist. 

import string
import sys
sys.path=[sys.path,"/usr/people/robert/development/xpktools/"]
import xpktools

def predictNOE(peaklist,originNuc,detectedNuc,originResNum,toResNum):
# Predict the i->j NOE position based on self peak (diagonal) assignments
# 
# example predictNOE(peaklist,"N15","H1",10,12)
#    where peaklist is of the type xpktools.peaklist
#    would generate a .xpk file entry for a crosspeak
#    that originated on N15 of residue 10 and ended up
#    as magnetization detected on the H1 nucleus of
#    residue 12.
# CAVEAT: The initial peaklist is assumed to be diagonal (self peaks only)
#       and currently there is not checking done to insure that this
#       assumption holds true.  Check your peaklist for errors and
#       off diagonal peaks before attempting to use predictNOE.

  returnLine=""	# The modified line to be returned to the caller

  datamap=_data_map(peaklist.datalabels)

  # Construct labels for keying into dictionary
  originAssCol	=  datamap[originNuc+".L"]+1
  originPPMCol	=  datamap[originNuc+".P"]+1
  detectedPPMCol = datamap[detectedNuc+".P"]+1

  # Make a list of the data lines involving the detected
  if (peaklist.residue_dict(detectedNuc).has_key(str(toResNum)) and 
      peaklist.residue_dict(detectedNuc).has_key(str(originResNum))):
    detectedList=peaklist.residue_dict(detectedNuc)[str(toResNum)]
    originList=peaklist.residue_dict(detectedNuc)[str(originResNum)]
    returnLine=detectedList[0]

    for line in detectedList:

      aveDetectedPPM	=_col_ave(detectedList,detectedPPMCol)
      aveOriginPPM	=_col_ave(originList,originPPMCol)
      originAss		=string.splitfields(originList[0])[originAssCol]

    returnLine=xpktools.replace_entry(returnLine,originAssCol+1,originAss)
    returnLine=xpktools.replace_entry(returnLine,originPPMCol+1,aveOriginPPM)

  return returnLine


def _data_map(labelline):
# Generate a map between datalabels and column number
#   based on a labelline
  i=0		# A counter
  datamap={}	# The data map dictionary
  labelList=string.splitfields(labelline)	# Get the label line

  # Get the column number for each label
  for i in range(len(labelList)):
    datamap[labelList[i]]=i

  return datamap

def _col_ave(list,col):
# Compute average values from a particular column in a string list
  sum=0; n=0
  for element in list:
    sum=sum+string.atof(string.split(element)[col])
    n=n+1
  return sum/n