Kindfield
 All Classes Namespaces Files Functions Variables Enumerations Enumerator Properties Friends Pages
orbital_density.py
Go to the documentation of this file.
1 # Plot the atoms and the bonds ################################################
2 from pylab import *
3 from mayavi import mlab
4 from os.path import join
5 import h5py
6 from argparse import ArgumentParser
7 from glob import glob
8 import os
9 import os.path
10 
11 parser = ArgumentParser()
12 parser.add_argument("results_path")
13 parser.add_argument("--contours", nargs="+", type=float)
14 parser.add_argument("--id", nargs='?', default="tmp")
15 args = parser.parse_args()
16 
17 output_dir = "tmp"
18 
19 if args.id != "tmp":
20  try:
21  from sumatra.projects import load_project
22  output_dir = os.path.join(os.path.abspath(load_project().data_store.root), args.id)
23  except ImportError:
24  pass
25 
26 if not os.path.exists(output_dir):
27  os.makedirs(output_dir)
28 
29 def draw_atoms(atoms, atom_meta):
30  n_electrons = 0
31  counter = 0
32  for atom in atoms:
33  if atom_meta[counter]["type"] == 1:
34  color = (1, 1, 1)
35  elif atom_meta[counter]["type"] == 8:
36  color = (1, 0, 0)
37  else:
38  color = (1, 1, 0)
39  mlab.points3d(atom[0], atom[1], atom[2],
40  scale_factor=0.3,
41  resolution=20,
42  color=color,
43  scale_mode='none')
44  counter += 1
45  return n_electrons
46 
47 
48 atoms_data_file = h5py.File(join(args.results_path, "results.h5"))
49 atom_meta = atoms_data_file.get("atomMeta")[:]
50 atoms = atoms_data_file.get("state")[:]
51 atoms_data_file.close()
52 
53 if args.contours:
54  contours = args.contours
55 else:
56  contours = linspace(0.001,0.9,10).tolist()
57 
58 counter = 0
59 for density_file_name in glob(os.path.join(args.results_path, "orbital_density_*.h5")):
60  density_file = h5py.File(density_file_name)
61  data = density_file.get("dataset")[:]
62  density_file.close()
63 
64  print "Data min,max:",data.min(),data.max()
65 
66  X,Y,Z = mgrid[-3:3:1j*data.shape[0], -3:3:1j*data.shape[1], -3:3:1j*data.shape[2]]
67 
68  mlab.figure(bgcolor=(0, 0, 0), size=(1280, 720))
69  mlab.clf()
70  n_electrons = draw_atoms(atoms, atom_meta)
71  data_max_min_diff = (data.max() - data.min())
72  iso = mlab.contour3d(X, Y, Z, data, vmin=contours[0], vmax=contours[-1], opacity=0.5, contours=contours)
73 
74  mlab.savefig(os.path.join(output_dir, "orbital_density_" + str(counter) + ".png"))
75  mlab.savefig(os.path.join(output_dir, "orbital_density_" + str(counter) + ".x3d"))
76  counter += 1