#!/usr/bin/env python # ** What is this code? ** # # This is an example script for using new biopython modules for # generating NOE crosspeak peaklists from diagonal peaklist within # the framework of nmrview. # nmrview is not required to run this script, only an installed # version of python. # ** What's important? ** # # The xpktools.py and NOEtools.py modules are what I'm trying to # demonstrate. They provide methods and a data class for performing # some general analysis on NMR data taken directly from peaklist. # The code in this script will demonstrate how they are used. # ** Who wrote this code? ** # Robert Bussell, Jr. # rgb2003@med.cornell.edu # ** Running this script ** # # To run this script on a UNIX/Linux system, make it executable and # modify the first line of this script to point to python if necessary. # First try running the code with the peaklist that I provide to get # the feel of how things work, then you can use your own peaklist if you # modify the variables under the "INITS" code block to make it work # with your data. The modules xpktools and NOEtools can be called from # your own scripts when you have them in place on your computer. # NOTE: It is very important to have an intact peaklist. If you copy and # paste mine into a file be prepared to remove inappropriate line breaks. # ** Output of this script ** # # This script generates a human readable standard output version of the # NOE coordinates as well as an nmrview peaklist out_example.xpk. # *********************************************************************** # ***** LOAD MODULES ***** import getopt import string import sys # -- don't need to modify sys.path with the *tools in Biopython # -- just need Biopython installed somewhere in the PYTHONPATH #sys.path=[sys.path,"./"] #sys.path=[sys.path,"/usr/people/robert/development/xpktools"] from Bio.NMR import xpktools # Contains data classes and functions for .xpk files from Bio.NMR import NOEtools # A module specific for generate NOE predictions # * * * * * * * * * * MAIN * * * * * * * * * * # ***** INITS ***** inc=1 # The NOE increment (n where i->i+n and i->i-n are noes) infn="./noed.xpk" # Input peaklist outfn="./out_example.xpk" # Output peaklist detectatom="H1" # Directly detected atom relayatom="N15" # J-coupling from here to detected atom fromatom="15N2" # The other labelled nucleus # *-*-* First the peaklist is read into a data class from xpktools # *-*-* that contains methods for easily extracting information from # *-*-* the peaklist file peaklist=xpktools.Peaklist(infn) # infn is the name of the xpk file # *-*-* The class attribute residue_dict allows the data lines # *-*-* to be separated from the header and returned here to # *-*-* the dictionary as a list indexed by the assignment # *-*-* of any of the nuclei in the file -- here, the detected atom # *-*-* is used dict=peaklist.residue_dict(detectatom) # *-*-* As well as the data, the dictionary contains two other entries, # *-*-* corresponding to the maximum and minimum residues indexed MAXRES=dict["maxres"] MINRES=dict["minres"] #****** CALCULATE AND WRITE CROSSPEAK PEAKLIST ***** # *-*-* The peaklist class has a method for writing out the header # *-*-* information in a format recognizable by nmrview peaklist.write_header(outfn) # Write the header to the output file # *-*-* Predict the i->i+inc and i->i-inc noe positions if possible # *-*-* Write each one to the output file as they are calculated count=0 # A counter that number the output data lines in order res=MINRES # minimum residue number in the set outlist=[] # Holds the output data while (res<=MAXRES): # *-*-* Predicting the NOE positions based on peak assignment data # *-*-* is done by supplying the peaklist to and specifying the label # *-*-* of the origin and detected atom in the NOE transfer as well as # *-*-* the residues between which the NOE transfer takes places. noe1=NOEtools.predictNOE(peaklist,"15N2","H1",res,res+inc) noe2=NOEtools.predictNOE(peaklist,"15N2","H1",res,res-inc) # *-*-* The output of predictNOE is in the form of an xpk entry line # *-*-* suitable for printing to an output file # *-*-* Additionally, it is possible to extract information easily from # *-*-* these output lines by using the xpktools.XpkEntry class entry1=xpktools.XpkEntry(noe1,peaklist.datalabels) if noe1!="": # *-*-* Here I'm using the XpkEntry class to gain access to # *-*-* specific fields in the that make the information # *-*-* more readable and suitable for creating data tables # *-*-* This output will be printed to the screen. # *-*-* The data table contains the assignment, coordinates and # *-*-* intensity of the resonance. print string.split(entry1.fields["15N2.L"],".")[0], "-->", string.split(entry1.fields["N15.L"],".")[0], "\t", entry1.fields["H1.P"], entry1.fields["N15.P"], entry1.fields["15N2.P"],entry1.fields["int"] noe1=noe1+"\012" noe1=xpktools.replace_entry(noe1,1,count) outlist.append(noe1) count += 1 if noe2!="": noe2=noe2+"\012" noe2=xpktools.replace_entry(noe2,1,count) outlist.append(noe2) count += 1 res += 1 # Open the output file and write the data outfile=open(outfn,'a') outfile.writelines(outlist) # Write the output lines to the file outfile.close()