Source code for pyphyschemtools.quantumChem_corner.pos2cif

#!/usr/bin/env python3
import sys, io, os
from ase.io import read, write

VERSION = "20260213"

[docs] def fix_xyz(output, full_symbols): with open(output, 'r') as f: lines = f.readlines() for i, s in enumerate(full_symbols): if s == 'D': lines[i+2] = lines[i+2].replace('H', 'D', 1) with open(output, 'w') as f: f.writelines(lines)
[docs] def fix_cif(output, full_symbols): with open(output, 'r') as f: lines = f.readlines() start = 0 for idx, line in enumerate(lines): if "_atom_site_occupancy" in line: start = idx + 1 break for i, s in enumerate(full_symbols): if s == 'D': lines[start+i] = lines[start+i].replace('H', 'D') with open(output, 'w') as f: f.writelines(lines)
[docs] def main(): name = os.path.basename(sys.argv[0]) # Gestion de l'option version if "-v" in sys.argv: print(f"{name} version {VERSION}") sys.exit(0) fmt = "cif" if "cif" in name else "xyz" if len(sys.argv) < 2: print(f"Usage: {name} [-v] <POSCAR>"); sys.exit(1) path = sys.argv[1] try: with open(path, 'r') as f: lines = f.readlines() raw_syms = lines[5].split() counts = [int(c) for c in lines[6].split()] full_syms = [] for s, c in zip(raw_syms, counts): full_syms.extend([s] * c) # Masquage pour ASE new_lines = list(lines) new_lines[5] = " ".join(["H" if s == "D" else s for s in raw_syms]) + "\n" atoms = read(io.StringIO("".join(new_lines)), format='vasp') out = f"{path}.{fmt}" write(out, atoms, format=fmt) if fmt == 'xyz': fix_xyz(out, full_syms) else: fix_cif(out, full_syms) print(f"✅ {name} (v{VERSION}) terminé -> {out}") except Exception as e: print(f"❌ Erreur : {e}")
if __name__ == "__main__": main()