00001
00002 '''
00003 This fetches ENSDF files from ie.lbl.gov for libmore.
00004 Set MORE_PHYS_FETCHER to point to this script.
00005 '''
00006
00007 import sys, os
00008 try:
00009 nuc = sys.argv[1]
00010 target = sys.argv[2]
00011
00012 except IndexError:
00013 print '''
00014 Usage: lbl-ensdf-fetcher.py local_file_path NUC
00015 NUC is [Abreviated name]-[mass number]
00016 If using with libmore, set MORE_PHYS_FETCHER to point to me
00017 '''
00018
00019 override = os.getenv('MORE_ENSDF_DIR',None)
00020 if override:
00021 target = override
00022
00023
00024 import os
00025 if os.path.exists(target):
00026
00027 sys.exit(0)
00028
00029 name,A = nuc.split('-')
00030 mlen=len(A)
00031 filename = '%(a)03d%(n)s.ens'%{'n':name,'a':int(A)}
00032 url = 'http://ie.lbl.gov/databases/data/%(a)03d/%(a)03d%(n)s/%(a)03d%(n)s.ens'%{'n':name,'a':int(A)}
00033 print url,'-->',target
00034
00035
00036 err_target = target + '/' + filename + '.HTTPError'
00037 print 'err_target =',err_target
00038 if os.path.exists(err_target):
00039 errfile = open(err_target,'r')
00040 print 'Previous download of',nuc,'failed with',errfile.readline()
00041 sys.exit(0)
00042
00043
00044 from urllib2 import urlopen, HTTPError
00045 try:
00046 response = urlopen(url)
00047 except HTTPError, err:
00048 err = str(err)
00049 print 'HTTPError: "%s"'%err
00050 errfile = open(err_target,'w')
00051 errfile.write(err)
00052 errfile.close()
00053 if '404' in err:
00054 sys.exit(0)
00055 sys.exit(1)
00056
00057 data = []
00058 for line in response.readlines():
00059 data.append(line.strip())
00060
00061 if '.bz2' in target:
00062 import bz2
00063 file = bz2.BZ2File(target,"w")
00064 else:
00065 file = open(target,"w")
00066
00067
00068
00069 for line in data:
00070 line = (3-mlen)*' ' + line
00071 while (len(line) < 80):
00072 line += ' '
00073 file.write(line + '\r\n')
00074
00075 file.close
00076
00077 sys.exit(0)
00078
00079