#!/usr/bin/python
import math
import string
import os
import sys
import re
data = []

def usage():
    print '''
histogram.py file1 field1 file2 field2 ...
    '''

# usagea
def read_data (filename, field):
	f = open (filename)

	vals = []
	for l in f.readlines ():
		l = string.split (l, '#') [0]
		
		fs = string.split (l)
		if field < len (fs):
		    	f = string.atof (fs[field]);
			vals.append (f)
		
	return vals

def find_interval (data):

	mins = []
	maxs = []
	
	for d in data :
		maxs.append (max (d))
		mins.append (min (d))

	return (min (mins), max (maxs)) 


def freqentify (data, index, interval):
	(mini,maxi) = interval

	ivlen = maxi - mini
	samples = 100

	freqs = [0] * samples
	for f in data[index]:
		i = int(samples * ((f  - mini)/ivlen))
		if i >= samples:
			i = samples-1 

		freqs[i] = freqs[i] + 1

	
	ofn = "/tmp/histo-plot-%d"% index
	fo = open (ofn, "w")

	j=0
	for f in freqs:
		l = (j * 1.0 / samples) * ivlen + mini

		off = index *  (0.003 * ivlen) + l
		
		fo.write( '%f %d\n' %  (off, f))
		j = j + 1


	fo.close ();
	return ofn


def plot_all(names):
	
	fc = open ("gnuplot.commands", 'w')

	def quote(x):
		return '\'' + x + "\' with histeps"
	
	pcs = string.join (map (quote, names), ', ')

	plotcommand = 'plot [*:*] [0:*]  %s' % pcs


	fc.write (plotcommand + "\npause -1 'hit return'\n " )
	
	fc.write ('set output "plot.eps"\n')
	fc.write ('set terminal postscript eps\n')
	fc.write (plotcommand + '\n')
	fc.close ()
	
	os.system ("gnuplot gnuplot.commands")


def zip(l):
	q = []
	while l:
		q.append ((l[0],l[1]))
		l = l[2:]
	return q


fieldidx = string.atoi (sys.argv[1])
av = sys.argv[2:] 

nm = []
for x in av:
	data.append( read_data (x, fieldidx))


iv = find_interval (data)

c = 0
for d in data:
	nm.append (freqentify (data, c, iv))
	c = c+ 1

plot_all (nm)
