root / ase / io / __init__.py @ 1
Historique | Voir | Annoter | Télécharger (13,86 ko)
1 | 1 | tkerber | import os |
---|---|---|---|
2 | 1 | tkerber | import sys |
3 | 1 | tkerber | from os.path import basename |
4 | 1 | tkerber | from tarfile import is_tarfile |
5 | 1 | tkerber | from zipfile import is_zipfile |
6 | 1 | tkerber | |
7 | 1 | tkerber | from ase.atoms import Atoms |
8 | 1 | tkerber | from ase.units import Bohr |
9 | 1 | tkerber | from ase.io.trajectory import PickleTrajectory |
10 | 1 | tkerber | |
11 | 1 | tkerber | __all__ = ['read', 'write', 'PickleTrajectory'] |
12 | 1 | tkerber | |
13 | 1 | tkerber | |
14 | 1 | tkerber | def read(filename, index=-1, format=None): |
15 | 1 | tkerber | """Read Atoms object(s) from file.
|
16 | 1 | tkerber |
|
17 | 1 | tkerber | filename: str
|
18 | 1 | tkerber | Name of the file to read from.
|
19 | 1 | tkerber | index: int or slice
|
20 | 1 | tkerber | If the file contains several configurations, the last configuration
|
21 | 1 | tkerber | will be returned by default. Use index=n to get configuration
|
22 | 1 | tkerber | number n (counting from zero).
|
23 | 1 | tkerber | format: str
|
24 | 1 | tkerber | Used to specify the file-format. If not given, the
|
25 | 1 | tkerber | file-format will be guessed by the *filetype* function.
|
26 | 1 | tkerber |
|
27 | 1 | tkerber | Known formats:
|
28 | 1 | tkerber |
|
29 | 1 | tkerber | ========================= ===========
|
30 | 1 | tkerber | format short name
|
31 | 1 | tkerber | ========================= ===========
|
32 | 1 | tkerber | GPAW restart-file gpw
|
33 | 1 | tkerber | Dacapo netCDF output file dacapo
|
34 | 1 | tkerber | Old ASE netCDF trajectory nc
|
35 | 1 | tkerber | Virtual Nano Lab file vnl
|
36 | 1 | tkerber | ASE pickle trajectory traj
|
37 | 1 | tkerber | GPAW text output gpaw-text
|
38 | 1 | tkerber | CUBE file cube
|
39 | 1 | tkerber | XCrySDen Structure File xsf
|
40 | 1 | tkerber | Dacapo text output dacapo-text
|
41 | 1 | tkerber | XYZ-file xyz
|
42 | 1 | tkerber | VASP POSCAR/CONTCAR file vasp
|
43 | 1 | tkerber | VASP OUTCAR file vasp_out
|
44 | 1 | tkerber | Protein Data Bank pdb
|
45 | 1 | tkerber | FHI-aims geometry file aims
|
46 | 1 | tkerber | FHI-aims output file aims_out
|
47 | 1 | tkerber | VTK XML Image Data vti
|
48 | 1 | tkerber | VTK XML Structured Grid vts
|
49 | 1 | tkerber | VTK XML Unstructured Grid vtu
|
50 | 1 | tkerber | TURBOMOLE coord file tmol
|
51 | 1 | tkerber | exciting input exi
|
52 | 1 | tkerber | AtomEye configuration cfg
|
53 | 1 | tkerber | WIEN2k structure file struct
|
54 | 1 | tkerber | DftbPlus input file dftb
|
55 | 1 | tkerber | ========================= ===========
|
56 | 1 | tkerber |
|
57 | 1 | tkerber | """
|
58 | 1 | tkerber | if isinstance(filename, str): |
59 | 1 | tkerber | p = filename.rfind('@')
|
60 | 1 | tkerber | if p != -1: |
61 | 1 | tkerber | try:
|
62 | 1 | tkerber | index = string2index(filename[p + 1:])
|
63 | 1 | tkerber | except ValueError: |
64 | 1 | tkerber | pass
|
65 | 1 | tkerber | else:
|
66 | 1 | tkerber | filename = filename[:p] |
67 | 1 | tkerber | |
68 | 1 | tkerber | if isinstance(index, str): |
69 | 1 | tkerber | index = string2index(index) |
70 | 1 | tkerber | |
71 | 1 | tkerber | if format is None: |
72 | 1 | tkerber | format = filetype(filename) |
73 | 1 | tkerber | |
74 | 1 | tkerber | if format.startswith('gpw'): |
75 | 1 | tkerber | import gpaw |
76 | 1 | tkerber | r = gpaw.io.open(filename, 'r')
|
77 | 1 | tkerber | positions = r.get('CartesianPositions') * Bohr
|
78 | 1 | tkerber | numbers = r.get('AtomicNumbers')
|
79 | 1 | tkerber | cell = r.get('UnitCell') * Bohr
|
80 | 1 | tkerber | pbc = r.get('BoundaryConditions')
|
81 | 1 | tkerber | tags = r.get('Tags')
|
82 | 1 | tkerber | magmoms = r.get('MagneticMoments')
|
83 | 1 | tkerber | |
84 | 1 | tkerber | atoms = Atoms(positions=positions, |
85 | 1 | tkerber | numbers=numbers, |
86 | 1 | tkerber | cell=cell, |
87 | 1 | tkerber | pbc=pbc) |
88 | 1 | tkerber | if tags.any():
|
89 | 1 | tkerber | atoms.set_tags(tags) |
90 | 1 | tkerber | if magmoms.any():
|
91 | 1 | tkerber | atoms.set_initial_magnetic_moments(magmoms) |
92 | 1 | tkerber | |
93 | 1 | tkerber | return atoms
|
94 | 1 | tkerber | |
95 | 1 | tkerber | if format == 'exi': |
96 | 1 | tkerber | from ase.io.exciting import read_exciting |
97 | 1 | tkerber | return read_exciting(filename, index)
|
98 | 1 | tkerber | |
99 | 1 | tkerber | if format == 'xyz': |
100 | 1 | tkerber | from ase.io.xyz import read_xyz |
101 | 1 | tkerber | return read_xyz(filename, index)
|
102 | 1 | tkerber | |
103 | 1 | tkerber | if format == 'traj': |
104 | 1 | tkerber | from ase.io.trajectory import read_trajectory |
105 | 1 | tkerber | return read_trajectory(filename, index)
|
106 | 1 | tkerber | |
107 | 1 | tkerber | if format == 'cube': |
108 | 1 | tkerber | from ase.io.cube import read_cube |
109 | 1 | tkerber | return read_cube(filename, index)
|
110 | 1 | tkerber | |
111 | 1 | tkerber | if format == 'nc': |
112 | 1 | tkerber | from ase.io.netcdf import read_netcdf |
113 | 1 | tkerber | return read_netcdf(filename, index)
|
114 | 1 | tkerber | |
115 | 1 | tkerber | if format == 'gpaw-text': |
116 | 1 | tkerber | from ase.io.gpawtext import read_gpaw_text |
117 | 1 | tkerber | return read_gpaw_text(filename, index)
|
118 | 1 | tkerber | |
119 | 1 | tkerber | if format == 'dacapo-text': |
120 | 1 | tkerber | from ase.io.dacapo import read_dacapo_text |
121 | 1 | tkerber | return read_dacapo_text(filename)
|
122 | 1 | tkerber | |
123 | 1 | tkerber | if format == 'dacapo': |
124 | 1 | tkerber | from ase.io.dacapo import read_dacapo |
125 | 1 | tkerber | return read_dacapo(filename)
|
126 | 1 | tkerber | |
127 | 1 | tkerber | if format == 'xsf': |
128 | 1 | tkerber | from ase.io.xsf import read_xsf |
129 | 1 | tkerber | return read_xsf(filename, index)
|
130 | 1 | tkerber | |
131 | 1 | tkerber | if format == 'vasp': |
132 | 1 | tkerber | from ase.io.vasp import read_vasp |
133 | 1 | tkerber | return read_vasp(filename)
|
134 | 1 | tkerber | |
135 | 1 | tkerber | if format == 'vasp_out': |
136 | 1 | tkerber | from ase.io.vasp import read_vasp_out |
137 | 1 | tkerber | return read_vasp_out(filename, index)
|
138 | 1 | tkerber | |
139 | 1 | tkerber | if format == 'mol': |
140 | 1 | tkerber | from ase.io.mol import read_mol |
141 | 1 | tkerber | return read_mol(filename)
|
142 | 1 | tkerber | |
143 | 1 | tkerber | if format == 'pdb': |
144 | 1 | tkerber | from ase.io.pdb import read_pdb |
145 | 1 | tkerber | return read_pdb(filename)
|
146 | 1 | tkerber | |
147 | 1 | tkerber | if format == 'cif': |
148 | 1 | tkerber | from ase.io.cif import read_cif |
149 | 1 | tkerber | return read_cif(filename)
|
150 | 1 | tkerber | |
151 | 1 | tkerber | if format == 'struct': |
152 | 1 | tkerber | from ase.io.wien2k import read_struct |
153 | 1 | tkerber | return read_struct(filename)
|
154 | 1 | tkerber | |
155 | 1 | tkerber | if format == 'vti': |
156 | 1 | tkerber | from ase.io.vtkxml import read_vti |
157 | 1 | tkerber | return read_vti(filename)
|
158 | 1 | tkerber | |
159 | 1 | tkerber | if format == 'vts': |
160 | 1 | tkerber | from ase.io.vtkxml import read_vts |
161 | 1 | tkerber | return read_vts(filename)
|
162 | 1 | tkerber | |
163 | 1 | tkerber | if format == 'vtu': |
164 | 1 | tkerber | from ase.io.vtkxml import read_vtu |
165 | 1 | tkerber | return read_vtu(filename)
|
166 | 1 | tkerber | |
167 | 1 | tkerber | if format == 'aims': |
168 | 1 | tkerber | from ase.io.aims import read_aims |
169 | 1 | tkerber | return read_aims(filename)
|
170 | 1 | tkerber | |
171 | 1 | tkerber | if format == 'aims_out': |
172 | 1 | tkerber | from ase.io.aims import read_aims_output |
173 | 1 | tkerber | return read_aims_output(filename, index)
|
174 | 1 | tkerber | |
175 | 1 | tkerber | if format == 'iwm': |
176 | 1 | tkerber | from ase.io.iwm import read_iwm |
177 | 1 | tkerber | return read_iwm(filename)
|
178 | 1 | tkerber | |
179 | 1 | tkerber | if format == 'Cmdft': |
180 | 1 | tkerber | from ase.io.cmdft import read_I_info |
181 | 1 | tkerber | return read_I_info(filename)
|
182 | 1 | tkerber | |
183 | 1 | tkerber | if format == 'tmol': |
184 | 1 | tkerber | from ase.io.turbomole import read_turbomole |
185 | 1 | tkerber | return read_turbomole(filename)
|
186 | 1 | tkerber | |
187 | 1 | tkerber | if format == 'cfg': |
188 | 1 | tkerber | from ase.io.cfg import read_cfg |
189 | 1 | tkerber | return read_cfg(filename)
|
190 | 1 | tkerber | |
191 | 1 | tkerber | if format == 'dftb': |
192 | 1 | tkerber | from ase.io.dftb import read_dftb |
193 | 1 | tkerber | return read_dftb(filename)
|
194 | 1 | tkerber | |
195 | 1 | tkerber | if format == 'sdf': |
196 | 1 | tkerber | from ase.io.sdf import read_sdf |
197 | 1 | tkerber | return read_sdf(filename)
|
198 | 1 | tkerber | |
199 | 1 | tkerber | raise RuntimeError('File format descriptor '+format+' not recognized!') |
200 | 1 | tkerber | |
201 | 1 | tkerber | |
202 | 1 | tkerber | def write(filename, images, format=None, **kwargs): |
203 | 1 | tkerber | """Write Atoms object(s) to file.
|
204 | 1 | tkerber |
|
205 | 1 | tkerber | filename: str
|
206 | 1 | tkerber | Name of the file to write to.
|
207 | 1 | tkerber | images: Atoms object or list of Atoms objects
|
208 | 1 | tkerber | A single Atoms object or a list of Atoms objects.
|
209 | 1 | tkerber | format: str
|
210 | 1 | tkerber | Used to specify the file-format. If not given, the
|
211 | 1 | tkerber | file-format will be taken from suffix of the filename.
|
212 | 1 | tkerber |
|
213 | 1 | tkerber | The accepted output formats:
|
214 | 1 | tkerber |
|
215 | 1 | tkerber | ========================= ===========
|
216 | 1 | tkerber | format short name
|
217 | 1 | tkerber | ========================= ===========
|
218 | 1 | tkerber | ASE pickle trajectory traj
|
219 | 1 | tkerber | CUBE file cube
|
220 | 1 | tkerber | XYZ-file xyz
|
221 | 1 | tkerber | VASP POSCAR/CONTCAR file vasp
|
222 | 1 | tkerber | Protein Data Bank pdb
|
223 | 1 | tkerber | XCrySDen Structure File xsf
|
224 | 1 | tkerber | FHI-aims geometry file aims
|
225 | 1 | tkerber | gOpenMol .plt file plt
|
226 | 1 | tkerber | Python script py
|
227 | 1 | tkerber | Encapsulated Postscript eps
|
228 | 1 | tkerber | Portable Network Graphics png
|
229 | 1 | tkerber | Persistance of Vision pov
|
230 | 1 | tkerber | VTK XML Image Data vti
|
231 | 1 | tkerber | VTK XML Structured Grid vts
|
232 | 1 | tkerber | VTK XML Unstructured Grid vtu
|
233 | 1 | tkerber | TURBOMOLE coord file tmol
|
234 | 1 | tkerber | exciting exi
|
235 | 1 | tkerber | AtomEye configuration cfg
|
236 | 1 | tkerber | WIEN2k structure file struct
|
237 | 1 | tkerber | DftbPlus input file dftb
|
238 | 1 | tkerber | ========================= ===========
|
239 | 1 | tkerber |
|
240 | 1 | tkerber | The use of additional keywords is format specific.
|
241 | 1 | tkerber |
|
242 | 1 | tkerber | The ``cube`` and ``plt`` formats accept (plt requires it) a ``data``
|
243 | 1 | tkerber | keyword, which can be used to write a 3D array to the file along
|
244 | 1 | tkerber | with the nuclei coordinates.
|
245 | 1 | tkerber |
|
246 | 1 | tkerber | The ``vti``, ``vts`` and ``vtu`` formats are all specifically directed
|
247 | 1 | tkerber | for use with MayaVi, and the latter is designated for visualization of
|
248 | 1 | tkerber | the atoms whereas the two others are intended for volume data. Further,
|
249 | 1 | tkerber | it should be noted that the ``vti`` format is intended for orthogonal
|
250 | 1 | tkerber | unit cells as only the grid-spacing is stored, whereas the ``vts`` format
|
251 | 1 | tkerber | additionally stores the coordinates of each grid point, thus making it
|
252 | 1 | tkerber | useful for volume date in more general unit cells.
|
253 | 1 | tkerber |
|
254 | 1 | tkerber | The ``eps``, ``png``, and ``pov`` formats are all graphics formats,
|
255 | 1 | tkerber | and accept the additional keywords:
|
256 | 1 | tkerber |
|
257 | 1 | tkerber | rotation: str (default '')
|
258 | 1 | tkerber | The rotation angles, e.g. '45x,70y,90z'.
|
259 | 1 | tkerber |
|
260 | 1 | tkerber | show_unit_cell: int (default 0)
|
261 | 1 | tkerber | Can be 0, 1, 2 to either not show, show, or show all of the unit cell.
|
262 | 1 | tkerber |
|
263 | 1 | tkerber | radii: array or float (default 1.0)
|
264 | 1 | tkerber | An array of same length as the list of atoms indicating the sphere radii.
|
265 | 1 | tkerber | A single float specifies a uniform scaling of the default covalent radii.
|
266 | 1 | tkerber |
|
267 | 1 | tkerber | bbox: 4 floats (default None)
|
268 | 1 | tkerber | Set the bounding box to (xll, yll, xur, yur) (lower left, upper right).
|
269 | 1 | tkerber |
|
270 | 1 | tkerber | colors: array (default None)
|
271 | 1 | tkerber | An array of same length as the list of atoms, indicating the rgb color
|
272 | 1 | tkerber | code for each atom. Default is the jmol_colors of ase/data/colors.
|
273 | 1 | tkerber |
|
274 | 1 | tkerber | scale: int (default 20)
|
275 | 1 | tkerber | Number of pixels per Angstrom.
|
276 | 1 | tkerber |
|
277 | 1 | tkerber | For the ``pov`` graphics format, ``scale`` should not be specified.
|
278 | 1 | tkerber | The elements of the color array can additionally be strings, or 4
|
279 | 1 | tkerber | and 5 vectors for named colors, rgb + filter, and rgb + filter + transmit
|
280 | 1 | tkerber | specification. This format accepts the additional keywords:
|
281 | 1 | tkerber |
|
282 | 1 | tkerber | ``run_povray``, ``display``, ``pause``, ``transparent``,
|
283 | 1 | tkerber | ``canvas_width``, ``canvas_height``, ``camera_dist``,
|
284 | 1 | tkerber | ``image_plane``, ``camera_type``, ``point_lights``,
|
285 | 1 | tkerber | ``area_light``, ``background``, ``textures``, ``celllinewidth``,
|
286 | 1 | tkerber | ``bondlinewidth``, ``bondatoms``
|
287 | 1 | tkerber | """
|
288 | 1 | tkerber | |
289 | 1 | tkerber | if format is None: |
290 | 1 | tkerber | if filename == '-': |
291 | 1 | tkerber | format = 'xyz'
|
292 | 1 | tkerber | filename = sys.stdout |
293 | 1 | tkerber | elif 'POSCAR' in filename or 'CONTCAR' in filename: |
294 | 1 | tkerber | format = 'vasp'
|
295 | 1 | tkerber | elif 'OUTCAR' in filename: |
296 | 1 | tkerber | format = 'vasp_out'
|
297 | 1 | tkerber | else:
|
298 | 1 | tkerber | suffix = filename.split('.')[-1] |
299 | 1 | tkerber | format = {}.get(suffix, suffix) # XXX this does not make sense
|
300 | 1 | tkerber | # Maybe like this:
|
301 | 1 | tkerber | ## format = {'traj': 'trajectory',
|
302 | 1 | tkerber | ## 'nc': 'netcdf',
|
303 | 1 | tkerber | ## 'exi': 'exciting',
|
304 | 1 | tkerber | ## 'in': 'aims',
|
305 | 1 | tkerber | ## 'tmol': 'turbomole',
|
306 | 1 | tkerber | ## }.get(suffix, suffix)
|
307 | 1 | tkerber | |
308 | 1 | tkerber | if format == 'exi': |
309 | 1 | tkerber | from ase.io.exciting import write_exciting |
310 | 1 | tkerber | write_exciting(filename, images) |
311 | 1 | tkerber | return
|
312 | 1 | tkerber | |
313 | 1 | tkerber | |
314 | 1 | tkerber | if format == 'xyz': |
315 | 1 | tkerber | from ase.io.xyz import write_xyz |
316 | 1 | tkerber | write_xyz(filename, images) |
317 | 1 | tkerber | return
|
318 | 1 | tkerber | elif format == 'in': |
319 | 1 | tkerber | format = 'aims'
|
320 | 1 | tkerber | elif format == 'tmol': |
321 | 1 | tkerber | from ase.io.turbomole import write_turbomole |
322 | 1 | tkerber | write_turbomole(filename, images) |
323 | 1 | tkerber | return
|
324 | 1 | tkerber | elif format == 'dftb': |
325 | 1 | tkerber | from ase.io.dftb import write_dftb |
326 | 1 | tkerber | write_dftb(filename, images) |
327 | 1 | tkerber | return
|
328 | 1 | tkerber | elif format == 'struct': |
329 | 1 | tkerber | from ase.io.wien2k import write_struct |
330 | 1 | tkerber | write_struct(filename, images, **kwargs) |
331 | 1 | tkerber | return
|
332 | 1 | tkerber | |
333 | 1 | tkerber | format = {'traj': 'trajectory', 'nc': 'netcdf'}.get(format, format) |
334 | 1 | tkerber | name = 'write_' + format
|
335 | 1 | tkerber | |
336 | 1 | tkerber | if format in ['vti', 'vts', 'vtu']: |
337 | 1 | tkerber | format = 'vtkxml'
|
338 | 1 | tkerber | |
339 | 1 | tkerber | if format is None: |
340 | 1 | tkerber | format = filetype(filename) |
341 | 1 | tkerber | |
342 | 1 | tkerber | try:
|
343 | 1 | tkerber | write = getattr(__import__('ase.io.%s' % format, {}, {}, [name]), name) |
344 | 1 | tkerber | except ImportError: |
345 | 1 | tkerber | raise TypeError('Unknown format: "%s".' % format) |
346 | 1 | tkerber | |
347 | 1 | tkerber | write(filename, images, **kwargs) |
348 | 1 | tkerber | |
349 | 1 | tkerber | |
350 | 1 | tkerber | def string2index(string): |
351 | 1 | tkerber | if ':' not in string: |
352 | 1 | tkerber | return int(string) |
353 | 1 | tkerber | i = [] |
354 | 1 | tkerber | for s in string.split(':'): |
355 | 1 | tkerber | if s == '': |
356 | 1 | tkerber | i.append(None)
|
357 | 1 | tkerber | else:
|
358 | 1 | tkerber | i.append(int(s))
|
359 | 1 | tkerber | i += (3 - len(i)) * [None] |
360 | 1 | tkerber | return slice(*i) |
361 | 1 | tkerber | |
362 | 1 | tkerber | |
363 | 1 | tkerber | def filetype(filename): |
364 | 1 | tkerber | """Try to guess the type of the file."""
|
365 | 1 | tkerber | fileobj = open(filename)
|
366 | 1 | tkerber | s3 = fileobj.read(3)
|
367 | 1 | tkerber | if len(s3) == 0: |
368 | 1 | tkerber | raise IOError('Empty file: ' + filename) |
369 | 1 | tkerber | |
370 | 1 | tkerber | if is_tarfile(filename):
|
371 | 1 | tkerber | return 'gpw' |
372 | 1 | tkerber | |
373 | 1 | tkerber | if s3 == 'CDF': |
374 | 1 | tkerber | from ase.io.pupynere import NetCDFFile |
375 | 1 | tkerber | nc = NetCDFFile(filename) |
376 | 1 | tkerber | if 'number_of_dynamic_atoms' in nc.dimensions: |
377 | 1 | tkerber | return 'dacapo' |
378 | 1 | tkerber | |
379 | 1 | tkerber | history = nc.history |
380 | 1 | tkerber | if history == 'GPAW restart file': |
381 | 1 | tkerber | return 'gpw-nc' |
382 | 1 | tkerber | if history == 'ASE trajectory': |
383 | 1 | tkerber | return 'nc' |
384 | 1 | tkerber | if history == 'Dacapo': |
385 | 1 | tkerber | return 'dacapo' |
386 | 1 | tkerber | raise IOError('Unknown netCDF file!') |
387 | 1 | tkerber | |
388 | 1 | tkerber | |
389 | 1 | tkerber | if is_zipfile(filename):
|
390 | 1 | tkerber | return 'vnl' |
391 | 1 | tkerber | |
392 | 1 | tkerber | fileobj.seek(0)
|
393 | 1 | tkerber | lines = fileobj.readlines(1000)
|
394 | 1 | tkerber | |
395 | 1 | tkerber | if lines[0].startswith('PickleTrajectory'): |
396 | 1 | tkerber | return 'traj' |
397 | 1 | tkerber | |
398 | 1 | tkerber | if lines[1].startswith('OUTER LOOP:') or filename.lower().endswith('.cube'): |
399 | 1 | tkerber | return 'cube' |
400 | 1 | tkerber | |
401 | 1 | tkerber | if ' ___ ___ ___ _ _ _ \n' in lines: |
402 | 1 | tkerber | return 'gpaw-text' |
403 | 1 | tkerber | |
404 | 1 | tkerber | if (' &&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&\n' |
405 | 1 | tkerber | in lines[:90]): |
406 | 1 | tkerber | return 'dacapo-text' |
407 | 1 | tkerber | |
408 | 1 | tkerber | for word in ['ANIMSTEPS', 'CRYSTAL', 'SLAB', 'POLYMER', 'MOLECULE']: |
409 | 1 | tkerber | if lines[0].startswith(word): |
410 | 1 | tkerber | return 'xsf' |
411 | 1 | tkerber | |
412 | 1 | tkerber | filename_v = basename(filename) |
413 | 1 | tkerber | if 'POSCAR' in filename_v or 'CONTCAR' in filename_v: |
414 | 1 | tkerber | return 'vasp' |
415 | 1 | tkerber | |
416 | 1 | tkerber | if 'OUTCAR' in filename_v: |
417 | 1 | tkerber | return 'vasp_out' |
418 | 1 | tkerber | |
419 | 1 | tkerber | if filename.lower().endswith('.exi'): |
420 | 1 | tkerber | return 'exi' |
421 | 1 | tkerber | |
422 | 1 | tkerber | if filename.lower().endswith('.mol'): |
423 | 1 | tkerber | return 'mol' |
424 | 1 | tkerber | |
425 | 1 | tkerber | if filename.lower().endswith('.pdb'): |
426 | 1 | tkerber | return 'pdb' |
427 | 1 | tkerber | |
428 | 1 | tkerber | if filename.lower().endswith('.cif'): |
429 | 1 | tkerber | return 'cif' |
430 | 1 | tkerber | |
431 | 1 | tkerber | if filename.lower().endswith('.struct'): |
432 | 1 | tkerber | return 'struct' |
433 | 1 | tkerber | |
434 | 1 | tkerber | if filename.lower().endswith('.in'): |
435 | 1 | tkerber | return 'aims' |
436 | 1 | tkerber | |
437 | 1 | tkerber | if filename.lower().endswith('.out'): |
438 | 1 | tkerber | return 'aims_out' |
439 | 1 | tkerber | |
440 | 1 | tkerber | if filename.lower().endswith('.cfg'): |
441 | 1 | tkerber | return 'cfg' |
442 | 1 | tkerber | |
443 | 1 | tkerber | if os.path.split(filename)[1] == 'atoms.dat': |
444 | 1 | tkerber | return 'iwm' |
445 | 1 | tkerber | |
446 | 1 | tkerber | if filename.endswith('I_info'): |
447 | 1 | tkerber | return 'Cmdft' |
448 | 1 | tkerber | |
449 | 1 | tkerber | if lines[0].startswith('$coord'): |
450 | 1 | tkerber | return 'tmol' |
451 | 1 | tkerber | |
452 | 1 | tkerber | if lines[0].startswith('Geometry'): |
453 | 1 | tkerber | return 'dftb' |
454 | 1 | tkerber | |
455 | 1 | tkerber | if s3 == '<?x': |
456 | 1 | tkerber | from ase.io.vtkxml import probe_vtkxml |
457 | 1 | tkerber | xmltype = probe_vtkxml(filename) |
458 | 1 | tkerber | if xmltype == 'ImageData': |
459 | 1 | tkerber | return 'vti' |
460 | 1 | tkerber | elif xmltype == 'StructuredGrid': |
461 | 1 | tkerber | return 'vts' |
462 | 1 | tkerber | elif xmltype == 'UnstructuredGrid': |
463 | 1 | tkerber | return 'vtu' |
464 | 1 | tkerber | elif xmltype is not None: |
465 | 1 | tkerber | raise IOError('Unknown VTK XML file!') |
466 | 1 | tkerber | |
467 | 1 | tkerber | if filename.lower().endswith('.sdf'): |
468 | 1 | tkerber | return 'sdf' |
469 | 1 | tkerber | |
470 | 1 | tkerber | return 'xyz' |