agpy 0.1 documentation

Source code for agpy.query_splatalogue

import atpy
import urllib,urllib2
import tempfile

"""
Module to search Splatalogue.net via splat, modeled loosely on
ftp://ftp.cv.nrao.edu/NRAO-staff/bkent/slap/idl/
"""

length_dict = {'meters':1.0,'m':1.0,
        'centimeters':1e-2,'cm':1e-2,
        'millimeters':1e-3,'mm':1e-3,
        'nanometers':1e-9,'nm':1e-9,
        'micrometers':1e-6,'micron':1e-6,'microns':1e-6,'um':1e-6,
        'kilometers':1e3,'km':1e3,
        'angstroms':1e-10,'A':1e-10,
        }

# example query of SPLATALOGUE directly:
# http://www.cv.nrao.edu/php/splat/c.php?sid%5B%5D=64&sid%5B%5D=108&calcIn=&data_version=v2.0&from=&to=&frequency_units=MHz&energy_range_from=&energy_range_to=&lill=on&tran=&submit=Search&no_atmospheric=no_atmospheric&no_potential=no_potential&no_probable=no_probable&include_only_nrao=include_only_nrao&displayLovas=displayLovas&displaySLAIM=displaySLAIM&displayJPL=displayJPL&displayCDMS=displayCDMS&displayToyaMA=displayToyaMA&displayOSU=displayOSU&displayRecomb=displayRecomb&displayLisa=displayLisa&displayRFI=displayRFI&ls1=ls1&ls5=ls5&el1=el1

[docs]def query_splatalogue(minwav=0.00260,maxwav=0.00261, waveunits='m',root_url='http://find.nrao.edu/splata-slap/slap', chemical_element=None, NRAO_Recommended=True,): """ Acquire an atpy table of a splatalogue searched based on wavelength. Future work will allow queries based on other parameters. I'm waiting on development by the SPLATASLAP database folks to implement these. """ if waveunits in length_dict: minwav = minwav * length_dict[waveunits] maxwav = maxwav * length_dict[waveunits] #query_url = "%s?REQUEST=queryData&WAVELENGTH=%f/%f" % (root_url,minwav,maxwav) # This is probably the more robust/pythonic way to do this sort of query: request_dict = {"REQUEST":"queryData","WAVELENGTH":"%f/%f" % (minwav,maxwav)} if chemical_element is not None: request_dict['CHEMICAL_ELEMENT'] = chemical_element #if NRAO_Recommended: request_dict['include_only_nrao'] = "yes" if NRAO_Recommended: request_dict['recommended'] = "1" #query_url = urllib2.Request(url=root_url, # data=urllib.urlencode(request_dict)) query_url = "%s?%s" % (root_url,urllib.urlencode(request_dict)) U = urllib2.urlopen(query_url) # Normally it would be possible to do this: # t = atpy.Table(U,type='vo') # instead we have to write to a file and flush it. # (see the error message below) R = U.read() U.close() tf = tempfile.NamedTemporaryFile() #for line in R: # print >>tf,line.strip() print >>tf,R print tf.name tf.file.flush() t = atpy.Table(tf.name,type='vo') return t
""" U = urllib2.urlopen(query_url) t = atpy.Table(U,type='vo') None:9:0: W35: 'value' attribute required for 'INFO' elements None:18:0: W03: Implicitly generating an ID from a name 'catalog name' -> 'catalog_name' None:27:0: W03: Implicitly generating an ID from a name 'molecular formula' -> 'molecular_formula' None:33:0: W03: Implicitly generating an ID from a name 'molecule type' -> 'molecule_type' None:54:0: W03: Implicitly generating an ID from a name 'frequency recommended' -> 'frequency_recommended' None:57:0: W03: Implicitly generating an ID from a name 'quantum numbers' -> 'quantum_numbers' ------------------------------------------------------------ Traceback (most recent call last): File "<ipython console>", line 1, in <module> File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/atpy/basetable.py", line 167, in __init__ self.read(*args, **kwargs) File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/atpy/basetable.py", line 213, in read atpy._readers[table_type](self, *args, **kwargs) File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/atpy/votable.py", line 86, in read votable = parse(filename, pedantic=pedantic) File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/vo/table.py", line 103, in parse return tree.VOTableFile(config=config, pos=(1, 1)).parse(iterator, config) File "/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/site-packages/vo/tree.py", line 2921, in parse for start, tag, data, pos in iterator: ValueError: 1:0: no element found """