#!/cygdrive/c/Python26/python.exe

# CMake mechanism for setting PYTHONPATH for test does not work on XP,
# so directory name is passed as argument to python, a real 
# programming language.
import sys
if len(sys.argv) > 1:
    sys.path.append(sys.argv[1])
    print "argument = ", sys.argv[1]

import os
print "PYTHONPATH = ", os.environ['PYTHONPATH']

print "sys.path = ", sys.path

# Pythonized version of HelloOpenMM.cpp

import openmm

def writePdb(frameNumber, state):
    # write out in PDB format
    atomSerialNumber = 1
    print "MODEL     %d\n" % frameNumber
    for pos in state.getPositions():
        print "ATOM  %5d AR    AR     1    %8.3f%8.3f%8.3f  1.00  0.00          AR\n" % \
            atomSerialNumber, pos[0]*10, pos[1]*10, pos[2]*10
        atomSerialNumber = atomSerialNumber + 1
    print "ENDMDL\n"


print openmm.Platform.getDefaultPluginsDirectory()
openmm.Platform.loadPluginsFromDirectory(openmm.Platform.getDefaultPluginsDirectory())

system = openmm.System()
nonbond = openmm.NonbondedForce() 
system.addForce(nonbond)

print "2"

for f in range(system.getNumForces()):
    print f
    force = system.getForce(f)

# Create atoms
initial_positions = openmm.Vec3List()
for a in range(3):
    system.addParticle(39.95) # mass
    nonbond.addParticle(0.0, 0.3350, 0.996) # charge, diameter, well depth
    initial_positions.append(openmm.Vec3(0.5*a,0,0))

print "3"

# Large step size may be required for stability with small forces
integrator = openmm.VerletIntegrator(0.020) # step size in picoseconds

print "4"; sys.stdout.flush()

# Let OpenMM Context choose best platform.
context = openmm.Context(system, integrator)

print "5"; sys.stdout.flush()

print "REMARK  Using OpenMM platform %s\n" % context.getPlatform().getName()

context.setPositions(initial_positions)

frameNum = 1
while True:
    frameNum += 1
    state = context.getState(openmm.State.Positions)
    time = state.getTime()
    writePdbFrame(frameNum, state)
    if time >= 10.0:
        break
    integrator.step(10) # number of steps between reports
