#!/usr/bin/python

import sys
import os.path
import glob
import re
sys.path.append( os.path.expanduser( "~/modules/fah_adaptive_sampling/FAHTools" ) ) 
from ProjectConfigurationFile import ProjectConfigurationFile
from FAHServer import FAHServer
from numpy import inf

server2dir = os.path.expanduser( "~/server2" )
server = FAHServer( server2dir )

try : verbose = int(sys.argv[1])
except : verbose = 0

def myprint( string ): 
	if verbose : print string

projects = sys.argv[2:]

# the pattern to match
pattern = re.compile( r'^-----$' )

for project in projects :

	totalGoodReturns=0
	totalBadReturns=0

	myprint( "Working on PROJ%s ***" % project )
	projconf = ProjectConfigurationFile( server.projects[str(project)] )
	
	for run in range( projconf.nruns ):
		for clone in range( projconf.nclones ):
			currdir = "%s/RUN%d/CLONE%d" % ( projconf.datapath, run, clone )

			instabFiles = glob.glob( "%s/frame*.instability" % currdir )
			xtcFiles = glob.glob( "%s/frame*.xtc" % currdir )

			nInstabFiles = len( instabFiles )
			nXtcFiles = len( xtcFiles )

			if nXtcFiles == 0 :
				continue

			elif nInstabFiles == 0 :
				myprint( "\tRUN%d CLONE%d clean (%d returns)" % ( run,clone, nXtcFiles ) )

			# there is at least one instability file
			else :
				nBadReturns = 0
				for instabFile in instabFiles :
					gen = int( re.findall(r'[0-9]+',instabFile)[-1] )
					file = open( instabFile )
					lines = file.readlines()
					file.close()
					for line in lines :
						matchobj = re.search( pattern, line )
						if matchobj : nBadReturns += 1
	
					# did someone return this WU?
					xtcName = instabFile.replace( "instability", "xtc" )
					if os.path.exists( xtcName ):
						nGoodReturns = 1
					else :
						nGoodReturns = 0

					myprint( "\tRUN%d CLONE%d GEN%d : %d good %d bad" % ( run, clone, gen, nGoodReturns, nBadReturns  ) )
					totalGoodReturns+=nGoodReturns
					totalBadReturns+=nBadReturns

	#print "PROJECT %s STATS ***" % project
        try : pct = float( totalBadReturns )/totalGoodReturns
        except ZeroDivisionError: pct = inf
        #print "%3d good %3d bad %3.3f" % ( totalGoodReturns, totalBadReturns, pct )
        print "servername %s %d %d" % ( project, totalGoodReturns, totalBadReturns )
