import numpy as np
import glob
import re
import commands

name,= glob.glob('RedshiftOutput????')
n = int(re.sub(r'\D',"",name))
a=commands.getoutput('grep InitialTime '+name)
currenttime=float(a.split()[2])

f=open('PopII_haloes_%04i.txt'%n,'r')

fo = open('PopII_massbin_evolution.txt','w')

t_min = 0
t_max = 24.0
n=5
mass_b = np.logspace(7,9,5)
mass_min = 7
mass_width = 0.5

bins = 300
dt = (t_max-t_min) /bins

lines = f.readlines()

#time_bins = np.zeros(bins)
mass_bins = np.zeros([n+1,bins])

i = 0
while i <len(lines):
   halomass = np.log10(float(lines[i].split()[1]))
   i = i+1
   if lines[i].split()[0] == '0':
      i=i+3
      continue
   else:
      i = i+1
      while lines[i] != "\n":
        mass = float(lines[i].split()[1])
        ct = float(lines[i].split()[2])
        index = int((currenttime-ct)/dt) 
        #time_bins[index] = time_bins[index]+1
        if halomass < 7.0:
           bin = 0
        elif halomass > 9.0:
           bin = 5
        else:
           bin = int((halomass - mass_min)/mass_width)+1 
        mass_bins[bin][index] = mass_bins[bin][index]+mass
        i=i+1
      i=i+2

#total_stars = time_bins.sum()
total_mass = mass_bins.sum(axis=1)
for i in xrange(bins):
   fo.write(str(i*dt)+" "+str(currenttime-i*dt)+" ")
   for j in range(n+1):
    fo.write(str(mass_bins[j][i])+" "+str(total_mass[j])+" ")
   #total_stars = total_stars - time_bins[i]
    total_mass[j] = total_mass[j] - mass_bins[j][i]
    if total_mass[j] < 1: total_mass[j] = 0.0
   fo.write("\n")

f.close()
fo.close()

