import sys
import pyMoleCuilder as mol

if len(sys.argv) < 13:
	sys.stderr.write("Usage: "+sys.argv[0]+" <file> <order> <DoLongrange> <DoValenceOnly> <level> <near_field_cells> <server> <port> <basis> <inter-order> <distance> <steps> <bondtable>\n")
	sys.exit(255)

FILE=sys.argv[1]
ORDER=sys.argv[2]
LONGRANGE=sys.argv[3]
VALENCEONLY=sys.argv[4]
LEVEL=sys.argv[5]
NEAR_FIELD_CELLS=sys.argv[6]
SERVERADDRESS=sys.argv[7]
CONTROLLERPORT=sys.argv[8]
BASISNAME=sys.argv[9]
INTERORDER=sys.argv[10]
DISTANCE=sys.argv[11]
STEPS=int(sys.argv[12])
BONDTABLE=sys.argv[13]

# load bond table file
mol.CommandBondLengthTable(BONDTABLE)
# Load molecule
mol.MoleculeLoad(FILE)
# Set parser parameter for mpqc
mol.ParserSetParserParameters("mpqc", "theory=CLHF;basis="+BASISNAME+";")
# set boundary
mol.WorldSetBoundaryConditions("Ignore Ignore Ignore")
# update molecule graph as first step setting does not change anything
mol.GraphUpdateMolecules()
# set box
mol.WorldChangeBox("8,0,0,8,0,8")

for i in range(0,STEPS):
	# set current time
	mol.WorldSetWorldTime(str(i))
	# fragment system
	mol.SelectionAllAtoms()
	mol.FragmentationFragmentation("", DISTANCE, ORDER, "1", "1", "", "0.", LEVEL, INTERORDER, "0", "0")
	mol.FragmentationFragmentationAutomation(SERVERADDRESS, CONTROLLERPORT, "mpqc", "0.", LEVEL, NEAR_FIELD_CELLS, "3", LONGRANGE, "", VALENCEONLY, "0")
	mol.FragmentationAnalyseFragmentationResults("1", "", "0")

# save homologies
mol.PotentialSaveHomologies("homology.dat")
mol.PotentialSaveAtomFragments("atomfragments.dat")

# exit
sys.exit(0)
