Statistiques
| Révision :

root / ase / io / vtkxml.py @ 19

Historique | Voir | Annoter | Télécharger (5,21 ko)

1 1 tkerber
import numpy as np
2 1 tkerber
#from Numeric import asarray as Numeric_asarray
3 1 tkerber
4 1 tkerber
#from ase.units import Bohr
5 1 tkerber
#from ase.parallel import paropen
6 1 tkerber
7 1 tkerber
fast = False
8 1 tkerber
9 1 tkerber
# -------------------------------------------------------------------
10 1 tkerber
11 1 tkerber
from vtk import vtkStructuredPoints, vtkDoubleArray, vtkXMLImageDataWriter
12 1 tkerber
13 1 tkerber
def write_vti(filename, atoms, data):
14 1 tkerber
15 1 tkerber
    #if isinstance(fileobj, str):
16 1 tkerber
    #    fileobj = paropen(fileobj, 'w')
17 1 tkerber
18 1 tkerber
    if isinstance(atoms, list):
19 1 tkerber
        if len(atoms) > 1:
20 1 tkerber
            raise ValueError('Can only write one configuration to a VTI file!')
21 1 tkerber
        atoms = atoms[0]
22 1 tkerber
23 1 tkerber
    if data is None:
24 1 tkerber
        raise ValueError('VTK XML Image Data (VTI) format requires data!')
25 1 tkerber
26 1 tkerber
    data = np.asarray(data)
27 1 tkerber
28 1 tkerber
    if data.dtype == complex:
29 1 tkerber
        data = np.abs(data)
30 1 tkerber
31 1 tkerber
    cell = atoms.get_cell()
32 1 tkerber
33 1 tkerber
    assert np.all(cell==np.diag(cell.diagonal())), 'Unit cell must be orthogonal'
34 1 tkerber
35 1 tkerber
    bbox = np.array(zip(np.zeros(3),cell.diagonal())).ravel()
36 1 tkerber
37 1 tkerber
    # Create a VTK grid of structured points
38 1 tkerber
    spts = vtkStructuredPoints()
39 1 tkerber
    spts.SetWholeBoundingBox(bbox)
40 1 tkerber
    spts.SetDimensions(data.shape)
41 1 tkerber
    spts.SetSpacing(cell.diagonal() / data.shape)
42 1 tkerber
    #spts.SetSpacing(paw.gd.h_c * Bohr)
43 1 tkerber
44 1 tkerber
    #print 'paw.gd.h_c * Bohr=',paw.gd.h_c * Bohr
45 1 tkerber
    #print 'atoms.cell.diagonal() / data.shape=', cell.diagonal()/data.shape
46 1 tkerber
    #assert np.all(paw.gd.h_c * Bohr==cell.diagonal()/data.shape)
47 1 tkerber
48 1 tkerber
    #s = paw.wfs.kpt_u[0].psit_nG[0].copy()
49 1 tkerber
    #data = paw.get_pseudo_wave_function(band=0, kpt=0, spin=0, pad=False)
50 1 tkerber
    #spts.point_data.scalars = data.swapaxes(0,2).flatten()
51 1 tkerber
    #spts.point_data.scalars.name = 'scalars'
52 1 tkerber
53 1 tkerber
    # Allocate a VTK array of type double and copy data
54 1 tkerber
    da = vtkDoubleArray()
55 1 tkerber
    da.SetName('scalars')
56 1 tkerber
    da.SetNumberOfComponents(1)
57 1 tkerber
    da.SetNumberOfTuples(np.prod(data.shape))
58 1 tkerber
59 1 tkerber
    for i,d in enumerate(data.swapaxes(0,2).flatten()):
60 1 tkerber
        da.SetTuple1(i,d)
61 1 tkerber
62 1 tkerber
    # Assign the VTK array as point data of the grid
63 1 tkerber
    spd = spts.GetPointData() # type(spd) is vtkPointData
64 1 tkerber
    spd.SetScalars(da)
65 1 tkerber
66 1 tkerber
    """
67 1 tkerber
    from vtk.util.vtkImageImportFromArray import vtkImageImportFromArray
68 1 tkerber
    iia = vtkImageImportFromArray()
69 1 tkerber
    #iia.SetArray(Numeric_asarray(data.swapaxes(0,2).flatten()))
70 1 tkerber
    iia.SetArray(Numeric_asarray(data))
71 1 tkerber
    ida = iia.GetOutput()
72 1 tkerber
    ipd = ida.GetPointData()
73 1 tkerber
    ipd.SetName('scalars')
74 1 tkerber
    spd.SetScalars(ipd.GetScalars())
75 1 tkerber
    """
76 1 tkerber
77 1 tkerber
    # Save the ImageData dataset to a VTK XML file.
78 1 tkerber
    w = vtkXMLImageDataWriter()
79 1 tkerber
80 1 tkerber
    if fast:
81 1 tkerber
        w.SetDataModeToAppend()
82 1 tkerber
        w.EncodeAppendedDataOff()
83 1 tkerber
    else:
84 1 tkerber
        w.SetDataModeToAscii()
85 1 tkerber
86 1 tkerber
    w.SetFileName(filename)
87 1 tkerber
    w.SetInput(spts)
88 1 tkerber
    w.Write()
89 1 tkerber
90 1 tkerber
# -------------------------------------------------------------------
91 1 tkerber
92 1 tkerber
from vtk import vtkStructuredGrid, vtkPoints, vtkXMLStructuredGridWriter
93 1 tkerber
94 1 tkerber
def write_vts(filename, atoms, data=None):
95 1 tkerber
    raise NotImplementedError
96 1 tkerber
97 1 tkerber
# -------------------------------------------------------------------
98 1 tkerber
99 1 tkerber
from vtk import vtkUnstructuredGrid, vtkPoints, vtkXMLUnstructuredGridWriter
100 1 tkerber
101 1 tkerber
def write_vtu(filename, atoms, data=None):
102 1 tkerber
103 1 tkerber
    #if isinstance(fileobj, str):
104 1 tkerber
    #    fileobj = paropen(fileobj, 'w')
105 1 tkerber
106 1 tkerber
    if isinstance(atoms, list):
107 1 tkerber
        if len(atoms) > 1:
108 1 tkerber
            raise ValueError('Can only write one configuration to a VTI file!')
109 1 tkerber
        atoms = atoms[0]
110 1 tkerber
111 1 tkerber
    """
112 1 tkerber
    if data is None:
113 1 tkerber
        raise ValueError('VTK XML Unstructured Grid (VTI) format requires data!')
114 1 tkerber

115 1 tkerber
    data = np.asarray(data)
116 1 tkerber

117 1 tkerber
    if data.dtype == complex:
118 1 tkerber
        data = np.abs(data)
119 1 tkerber
    """
120 1 tkerber
121 1 tkerber
    cell = atoms.get_cell()
122 1 tkerber
123 1 tkerber
    assert np.all(cell==np.diag(cell.diagonal())), 'Unit cell must be orthogonal' #TODO bounding box with general unit cell?!
124 1 tkerber
125 1 tkerber
    bbox = np.array(zip(np.zeros(3),cell.diagonal())).ravel()
126 1 tkerber
127 1 tkerber
    # Create a VTK grid of structured points
128 1 tkerber
    ugd = vtkUnstructuredGrid()
129 1 tkerber
    ugd.SetWholeBoundingBox(bbox)
130 1 tkerber
131 1 tkerber
    """
132 1 tkerber
    # Allocate a VTK array of type double and copy data
133 1 tkerber
    da = vtkDoubleArray()
134 1 tkerber
    da.SetName('scalars')
135 1 tkerber
    da.SetNumberOfComponents(3)
136 1 tkerber
    da.SetNumberOfTuples(len(atoms))
137 1 tkerber

138 1 tkerber
    for i,pos in enumerate(atoms.get_positions()):
139 1 tkerber
        da.SetTuple3(i,pos[0],pos[1],pos[2])
140 1 tkerber
    """
141 1 tkerber
    p = vtkPoints()
142 1 tkerber
    p.SetNumberOfPoints(len(atoms))
143 1 tkerber
    p.SetDataTypeToDouble()
144 1 tkerber
    for i,pos in enumerate(atoms.get_positions()):
145 1 tkerber
        p.InsertPoint(i,pos[0],pos[1],pos[2])
146 1 tkerber
147 1 tkerber
148 1 tkerber
    ugd.SetPoints(p)
149 1 tkerber
150 1 tkerber
    # Assign the VTK array as point data of the grid
151 1 tkerber
    #upd = ugd.GetPointData() # type(spd) is vtkPointData
152 1 tkerber
    #upd.SetScalars(da)
153 1 tkerber
154 1 tkerber
155 1 tkerber
    # Save the UnstructuredGrid dataset to a VTK XML file.
156 1 tkerber
    w = vtkXMLUnstructuredGridWriter()
157 1 tkerber
158 1 tkerber
    if fast:
159 1 tkerber
        w.SetDataModeToAppend()
160 1 tkerber
        w.EncodeAppendedDataOff()
161 1 tkerber
    else:
162 1 tkerber
        w.GetCompressor().SetCompressionLevel(0)
163 1 tkerber
        w.SetDataModeToAscii()
164 1 tkerber
165 1 tkerber
    w.SetFileName(filename)
166 1 tkerber
    w.SetInput(ugd)
167 1 tkerber
    w.Write()
168 1 tkerber
169 1 tkerber
170 1 tkerber
# -------------------------------------------------------------------
171 1 tkerber
172 1 tkerber
def read_vti(filename):
173 1 tkerber
    raise NotImplementedError
174 1 tkerber
175 1 tkerber
def read_vts(filename):
176 1 tkerber
    raise NotImplementedError
177 1 tkerber
178 1 tkerber
def read_vtu(filename):
179 1 tkerber
    raise NotImplementedError
180 1 tkerber
181 1 tkerber
# -------------------------------------------------------------------
182 1 tkerber
183 1 tkerber
from vtk import vtkXMLFileReadTester
184 1 tkerber
185 1 tkerber
def probe_vtkxml(filename):
186 1 tkerber
    """something..."""
187 1 tkerber
188 1 tkerber
    r = vtkXMLFileReadTester()
189 1 tkerber
    r.SetFileName(filename)
190 1 tkerber
191 1 tkerber
    if r.TestReadFile():
192 1 tkerber
        return r.GetFileDataType()
193 1 tkerber
    else:
194 1 tkerber
        return None