import math
import sys
from yt.mods import *
import numpy as np
from yt.analysis_modules.halo_finding.api import *
import glob
import re
import commands

massmin = 1.0e6
bins =48  # 300
binwidth = 0.1 #math.log10(massmax/massmin)/bins
massmax = 10**(math.log10(massmin)+bins*binwidth)

dlist = glob.glob('RD00??')
dlist.sort()
#dlist.reverse() 
#output = int(re.sub(r'\D',"",fn))
for folder in dlist:
  n = int(re.sub(r'\D',"",folder))
  #if n > 5 :continue
  if glob.glob(folder+'/PopIII__histogram.txt') != []: continue  
  f=open(folder+'/PopIII_haloes.txt','r')
  fo = open(folder+'/PopIII_histogram.txt','w')
  halolist = []
  PopIIIremnant = []
  PopIIIstar = []
  line = f.readline()
  while line != '':
   halomass = float(line.split()[0])
   halolist.append(halomass)
   PopIIIremnant.append(int(line.split()[1]))
   PopIIIstar.append(int(line.split()[4]))
   line = f.readline()
  halocount = np.zeros(bins+1)
  totalremnant = np.zeros(bins+1)
  totalstar = np.zeros(bins+1)
  totalhalo = np.zeros(bins+1)
  for halomass,remnant,star in zip(halolist,PopIIIremnant,PopIIIstar):
   index = int((math.log10(halomass/massmin)+0.5*binwidth)/binwidth)
   if index < 0: continue
   if (remnant+star) > 0:
     halocount[index] = halocount[index] + 1
     if remnant > 0 :
       totalremnant[index] = totalremnant[index] + remnant
     if star > 0:
       totalstar[index] = totalstar[index] + star
   totalhalo[index] = totalhalo[index] + 1

  cumulationremnant = 0.0
  cumulationstar = 0.0
  bin = math.log10(massmin) + 0.5*binwidth
  for count,remnant,star,halo in zip(halocount,totalremnant,totalstar,totalhalo):
    cumulationremnant = cumulationremnant + remnant
    cumulationstar = cumulationstar + star
    fo.write(str(10**bin)+" "+str(count)+" "+str(halo)+" "+str(remnant)+" "+str(cumulationremnant)+\
       " "+str(star)+" "+str(cumulationstar)+" "+str(((remnant+star)/count if count > 0 else 0))+" "+"\n")
    bin =  bin + binwidth

  f.close()
  fo.close()


