
from chempy.models import Indexed
from chempy import water_amber,water_residues
from chempy import hetatm,path,io
import os

import copy

def fill_box(area,water=None,box=18.774349):
   if not water:
      test_path = path + "water.pdb"
      if os.path.exists(test_path):
         water= io.pdb.fromFile(test_path)
         water= hetatm.generate(water,forcefield=water_amber,
                             topology=water_residues)
   if not water:
      raise RunError('Need water structure file.')
   solv_box = Indexed()
   half = box/2
   x = area[0][0]
   c = 0
   while x<area[1][0]:
      y = area[0][1]
      while y<area[1][1]:
         z = area[0][2]
         while z<area[1][2]:
            tmp = copy.deepcopy(water)
            lr = ''
            for a in tmp.atom:
               if a.resi!=lr:
                  c = c + 1
                  lr = a.resi
               a.resi = str(c)
               b = a.coord
               b[0] = b[0] + x + half
               b[1] = b[1] + y + half
               b[2] = b[2] + z + half
            print " "+__name__+": filling box at %8.3f %8.3f %8.3f\n" % (x,y,z)
            solv_box.merge(tmp)
            z = z + box
         y = y + box
      x = x + box
   return solv_box


