#!/usr/bin/env python

# Kurt Schwehr, Oct 2003, http://schwehr.org/xcore
# Copyright (C) 2003, Released under the LGPL license

import os, os.path, string, sys
import re # Regular expressions

EXIT_FAILURE=1

if (5 != len(sys.argv)):
    print len(sys.argv)
    print sys.argv
    print '\n   ERROR:  invalid number of arguments'
    print "   USAGE: ",sys.argv[0], " ol92ams-eigen2.dat minX maxX bins"
    sys.exit(EXIT_FAILURE)

i = 1;
try:
    inFileName=sys.argv[i]; i+=1
    infile = open(inFileName,"r");
except:
    print "Unable to open input file: ", inFileName
    sys.exit(EXIT_FAILURE)

try:
    minX = float(sys.argv[i]); i += 1
except:
    print "ERROR: minX must be an int or float: ", sys.argv[i]
    sys.exit(EXIT_FAILURE)


try:
    maxX = float(sys.argv[i]); i += 1
except:
    print "ERROR: maxX must be an int or float: ", sys.argv[i]
    sys.exit(EXIT_FAILURE)


try:
    bins = int(sys.argv[i]); i += 1
except:
    print "ERROR: bins must be an int: ", sys.argv[i]
    sys.exit(EXIT_FAILURE)

#print minX, maxX, bins

def getbin(val, min, max, numbins):
    valnew = val - min
    range = max - min
    delv = range/numbins
    which = int(valnew/delv)
    #print "v, vn, r, d, w", val, valnew, range, delv, which, valnew/delv
    return(which)

def getcenter(bin, min, max, numbins):
    range = max - min
    delv = range/numbins
    #return (min + (bin) * delv + 0.5 * delv)
    return (min + (bin) * delv)


# Make all bins be empty
bincount=[]
for i in range(0,bins):
    bincount.append(0)

for line in infile.xreadlines():
    val = float (line)
    whichbin = getbin(val, minX, maxX, bins)
    bincount[whichbin] += 1

#print bincount

for i in range (bins):
    print getcenter(i,minX,maxX,bins), bincount[i]

print getcenter(bins,minX,maxX,bins), 0
