added "no data check" and updated script backbone to be consistent with other scripts (croak).
This commit is contained in:
parent
72e7dfa5af
commit
06715dc99f
|
@ -4,6 +4,9 @@
|
||||||
import os,sys,string,numpy
|
import os,sys,string,numpy
|
||||||
from optparse import OptionParser, Option
|
from optparse import OptionParser, Option
|
||||||
|
|
||||||
|
scriptID = '$Id$'
|
||||||
|
scriptName = scriptID.split()[1]
|
||||||
|
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
class extendableOption(Option):
|
class extendableOption(Option):
|
||||||
# -----------------------------
|
# -----------------------------
|
||||||
|
@ -30,7 +33,7 @@ class extendableOption(Option):
|
||||||
|
|
||||||
parser = OptionParser(option_class=extendableOption, usage='%prog options [file[s]]', description = """
|
parser = OptionParser(option_class=extendableOption, usage='%prog options [file[s]]', description = """
|
||||||
Produces a binned grid of two columns from an ASCIItable, i.e. a two-dimensional probability density map.
|
Produces a binned grid of two columns from an ASCIItable, i.e. a two-dimensional probability density map.
|
||||||
""" + string.replace('$Id$','\n','\\n')
|
""" + string.replace(scriptID,'\n','\\n')
|
||||||
)
|
)
|
||||||
|
|
||||||
|
|
||||||
|
@ -68,18 +71,25 @@ result = numpy.zeros((options.bins[0]*options.bins[1],3),'f')
|
||||||
|
|
||||||
files = []
|
files = []
|
||||||
if filenames == []:
|
if filenames == []:
|
||||||
files.append({'name':'STDIN', 'input':sys.stdin, 'output':sys.stdout})
|
files.append({'name': 'STDIN',
|
||||||
|
'input': sys.stdin,
|
||||||
|
'output': sys.stdout,
|
||||||
|
'croak': sys.stderr,
|
||||||
|
})
|
||||||
else:
|
else:
|
||||||
for name in filenames:
|
for name in filenames:
|
||||||
if os.path.exists(name):
|
if os.path.exists(name):
|
||||||
files.append({'name':name, \
|
files.append({'name': name,
|
||||||
'input':open(name), \
|
'input': open(name),
|
||||||
'output':open(os.path.splitext(name)[0]+'_binned%i-%i'%(options.data[0],options.data[1])+os.path.splitext(name)[1],'w')})
|
'output': open(os.path.splitext(name)[0]+'_binned%i-%i'%(options.data[0],options.data[1])+os.path.splitext(name)[1],'w'),
|
||||||
|
'croak': sys.stderr,
|
||||||
|
})
|
||||||
|
|
||||||
# ------------------------------------------ loop over input files ---------------------------------------
|
# ------------------------------------------ loop over input files ---------------------------------------
|
||||||
|
|
||||||
for file in files:
|
for file in files:
|
||||||
if file['name'] != 'STDIN': print file['name']
|
if file['name'] != 'STDIN': file['croak'].write('\033[1m'+scriptName+'\033[0m: '+file['name']+'\n')
|
||||||
|
else: file['croak'].write('\033[1m'+scriptName+'\033[0m\n')
|
||||||
|
|
||||||
skip = int(file['input'].readline().split()[0])
|
skip = int(file['input'].readline().split()[0])
|
||||||
for i in xrange(skip): headers = file['input'].readline().split()
|
for i in xrange(skip): headers = file['input'].readline().split()
|
||||||
|
@ -100,16 +110,21 @@ for file in files:
|
||||||
if x >=0 and x < options.bins[0] and y >= 0 and y < options.bins[1]: grid[x,y] += 1
|
if x >=0 and x < options.bins[0] and y >= 0 and y < options.bins[1]: grid[x,y] += 1
|
||||||
|
|
||||||
if (range[2] == 0.0).all(): range[2] = [grid.min(),grid.max()]
|
if (range[2] == 0.0).all(): range[2] = [grid.min(),grid.max()]
|
||||||
|
if (range[2] == 0.0).all(): # no data in grid?
|
||||||
|
file['croak'].write('no data found on grid...\n')
|
||||||
|
range[2,:] = numpy.array([0.0,1.0]) # making up arbitrary z range
|
||||||
if options.type[2].lower() == 'log':
|
if options.type[2].lower() == 'log':
|
||||||
grid = numpy.log(grid)
|
grid = numpy.log(grid)
|
||||||
range[2] = numpy.log(range[2])
|
range[2] = numpy.log(range[2])
|
||||||
|
|
||||||
delta[2] = range[2,1]-range[2,0]
|
delta[2] = range[2,1]-range[2,0]
|
||||||
|
|
||||||
|
|
||||||
i = 0
|
i = 0
|
||||||
for x in xrange(options.bins[0]):
|
for x in xrange(options.bins[0]):
|
||||||
for y in xrange(options.bins[1]):
|
for y in xrange(options.bins[1]):
|
||||||
result[i,:] = [range[0,0]+delta[0]/options.bins[0]*(x+0.5),\
|
result[i,:] = [range[0,0]+delta[0]/options.bins[0]*(x+0.5),
|
||||||
range[1,0]+delta[1]/options.bins[1]*(y+0.5),\
|
range[1,0]+delta[1]/options.bins[1]*(y+0.5),
|
||||||
min(1.0,max(0.0,(grid[x,y]-range[2,0])/delta[2]))]
|
min(1.0,max(0.0,(grid[x,y]-range[2,0])/delta[2]))]
|
||||||
if options.type[0].lower() == 'log': result[i,0] = numpy.exp(result[i,0])
|
if options.type[0].lower() == 'log': result[i,0] = numpy.exp(result[i,0])
|
||||||
if options.type[1].lower() == 'log': result[i,1] = numpy.exp(result[i,1])
|
if options.type[1].lower() == 'log': result[i,1] = numpy.exp(result[i,1])
|
||||||
|
|
Loading…
Reference in New Issue