#!/usr/bin/python -Wall # ================================================================ # John Kerl # 2007-06-28 # kerl.john.r@gmail.com # ================================================================ # This software is released under the terms of the GNU GPL. # Please see LICENSE.txt in the same directory as this file. # ================================================================ from __future__ import division # 1/2 = 0.5, not 0. import sys import sackmat_m import pyrcio_m import stats_m # ---------------------------------------------------------------- def usage(): print >> sys.stderr, "Usage: %s [options] {file name}" % (sys.argv[0]) print >> sys.stderr, "Use \"-\" as file name to read from standard input." print >> sys.stderr, "Each line of the file should contain one whitespace-delimited X Y pair." print >> sys.stderr, "Options:" print >> sys.stderr, " -lo {value}: specify lower bound (else taken from data mininum)." print >> sys.stderr, " -hi {value}: specify upper bound (else taken from data maxinum)." print >> sys.stderr, " -nbins {value}: specify number of bins (default %d)." % (num_bins) sys.exit(1) # ---------------------------------------------------------------- # Set defaults. have_spec_lo_x = 0 have_spec_hi_x = 0 lo_x = 0 hi_x = 0 num_x_bins = 20 have_spec_lo_y = 0 have_spec_hi_y = 0 lo_y = 0 hi_y = 0 num_y_bins = 20 # ---------------------------------------------------------------- # Parse command line. argi = 1 argc = len(sys.argv) while ((argi < argc) and (sys.argv[argi][0] == '-')): if (sys.argv[argi] == '-'): break elif (sys.argv[argi] == '--'): break elif (sys.argv[argi] == '--help'): usage() elif (sys.argv[argi] == '-h'): usage() elif (sys.argv[argi] == '-lox'): argi += 1 if ((argc - argi) < 1): usage() have_spec_lo_x = 1 lo_x = float(sys.argv[argi]) elif (sys.argv[argi] == '-hix'): argi += 1 if ((argc - argi) < 1): usage() have_spec_hi_x = 1 hi_x = float(sys.argv[argi]) elif (sys.argv[argi] == '-nxbins'): argi += 1 if ((argc - argi) < 1): usage() num_x_bins = int(sys.argv[argi]) elif (sys.argv[argi] == '-loy'): argi += 1 if ((argc - argi) < 1): usage() have_spec_lo_y = 1 lo_y = float(sys.argv[argi]) elif (sys.argv[argi] == '-hiy'): argi += 1 if ((argc - argi) < 1): usage() have_spec_hi_y = 1 hi_y = float(sys.argv[argi]) elif (sys.argv[argi] == '-nybins'): argi += 1 if ((argc - argi) < 1): usage() num_y_bins = int(sys.argv[argi]) else: usage() argi += 1 if ((argc - argi) != 1): usage() file_name = sys.argv[argi] # ---------------------------------------------------------------- def select_x(pair): return pair[0] def select_y(pair): return pair[1] # ---------------------------------------------------------------- # xxx check nc == 2 # o o # o o # o o # o o # o o pairs = pyrcio_m.read_real_matrix(file_name) xs = map(select_x, pairs) ys = map(select_y, pairs) if (not have_spec_lo_x): lo_x = stats_m.find_min(xs) if (not have_spec_hi_x): hi_x = stats_m.find_max(xs) if (not have_spec_lo_y): lo_y = stats_m.find_min(ys) if (not have_spec_hi_y): hi_y = stats_m.find_max(ys) bins = stats_m.make_histogram2(pairs, lo_x, hi_x, num_x_bins, lo_y, hi_y, num_y_bins) #labels = stats_m.make_histogram2_labels( # lo_x, hi_x, num_x_bins, # lo_y, hi_y, num_y_bins) for i in range(0, num_x_bins): for j in range(0, num_y_bins): print bins[i][j], #print labels[i][j], bins[i][j] print