comparison umelt_service.py @ 5:b321e0517be3 draft

Uploaded
author ben-warren
date Thu, 22 May 2014 20:30:19 -0400
parents
children f201e8c6e004
comparison
equal deleted inserted replaced
4:be070a68521e 5:b321e0517be3
1 #!/usr/bin/env python
2
3 ##interrogate umelt service at Univ of Utah
4 import sys
5 import urllib
6 import urllib2
7 import xml.etree.ElementTree as ET
8 import numpy as np
9 import scipy as sp
10 from scipy import interpolate
11 from scipy.interpolate import interp1d
12
13
14 url='https://www.dna.utah.edu/db/services/cgi-bin/udesign.cgi'
15 timeout_sec=500 ## default for timeout
16
17 # Query UW melt prediction service for a single sequence, returning default array for helicity, assuming within temperature range of 65-95
18 def getmelt(input_seq):
19 values = {'seq' : input_seq, 'rs':0, 'dmso':0,'cation': 20 ,'mg': 2} # Note the buffer conditions
20 data = urllib.urlencode(values)
21 req = urllib2.Request(url, data)
22 try:
23 response = urllib2.urlopen(req,timeout=timeout_sec)
24 except urllib2.HTTPError, e:
25 print 'The server couldn\'t fulfill the request.'
26 print 'Error code: ', e.code
27 except urllib2.URLError, e:
28 print 'We failed to reach a server.'
29 print 'Reason: ', e.reason
30 else:
31 melt_data = response.read()
32 tree = ET.fromstring(melt_data)
33 helicity = [amp.find('helicity').text.split() for amp in tree.findall('amplicon')]
34 hels = np.array(helicity[0], dtype=np.float32).transpose()
35 return hels
36
37 # helicity[0] used because the default retreived data is a list of 3 lists (for WT, mu and hets). The 3 lists are identical for our data (no IUPAC) so only [0] is used.
38
39 def getTm(hel_array):
40 temps=np.arange(65,100.5,0.5) # Temperature range of 65-100.5. Step of 0.5 NEEDS TO BE CHECKED..REcent change?
41 tck = interpolate.splrep(temps,hel_array,s=0)
42 xnew =np.arange(65,95.5,0.05)
43 yder = interpolate.splev(xnew,tck,der=1) # der=1, first derivative
44 return xnew[yder.argmin()] # Returns the x value corresponding to the minimum (peak) y value -> Tm