Source code for pyprocar.scripts.scriptFilter


from typing import List

from ..utils import ProcarFileFilter
from ..utils import welcome


[docs]def filter( inFile:str, outFile:str, atoms:List[int]=None, orbitals:List[int]=None, orbital_names:List[str]=None, bands:List[int]=None, spin=None, kpoints=None, human_atoms:bool=False, ): """This module filters the PROCAR file and re-write a new one. Parameters ---------- inFile : str _description_ outFile : str _description_ atoms : List[int], optional _description_, by default None orbitals : List[int], optional _description_, by default None orbital_names : List[str], optional _description_, by default None bands : List[int], optional _description_, by default None spin : _type_, optional _description_, by default None kpoints : _type_, optional _description_, by default None human_atoms : bool, optional _description_, by default False Raises ------ RuntimeError _description_ """ welcome() print("Input file :", inFile) print("Output file :", outFile) print("atoms :", atoms) if atoms: print("human_atoms :", human_atoms) print("orbitals :", orbitals) if orbitals: print("orb. names :", orbital_names) print("bands :", bands) print("spins :", spin) print("k-points :", kpoints) # Access init class of ProcarFileFilter and pass two arguments FileFilter = ProcarFileFilter(inFile, outFile) # for atoms if atoms: print("Manipulating the atoms") if human_atoms: atoms = [[y - 1 for y in x] for x in atoms] print("new atoms list :", atoms) # Now just left to call the driver member FileFilter.FilterAtoms(atoms) # for orbitals elif orbitals: print("Manipulating the orbitals") # If orbitals orbital_names is None, it needs to be filled if orbital_names is None: orbital_names = ["o" + str(x) for x in range(len(orbitals))] print("New orbitals names (default): ", orbital_names) # testing if makes sense if len(orbitals) != len(orbital_names): raise RuntimeError("length of orbitals and orbitals names do not match") FileFilter.FilterOrbitals(orbitals, orbital_names) # for bands elif bands: print("Manipulating the bands") bmin = bands[0] bmax = bands[1] if bmax < bmin: bmax, bmin = bmin, bmax print("New bands limits: ", bmin, " to ", bmax) FileFilter.FilterBands(bmin, bmax) # for k-points elif kpoints: print("Manipulating the k-points") kmin = kpoints[0] kmax = kpoints[1] if kmax < kmin: kmax, kmin = kmin, kmax print("New k-points limits: ", kmin, " to ", kmax) FileFilter.FilterKpoints(kmin, kmax) # for spin elif spin: print("Manipulating the spin") FileFilter.FilterSpin(spin) return