[docs]deffilter(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)ifatoms:print("human_atoms :",human_atoms)print("orbitals :",orbitals)iforbitals:print("orb. names :",orbital_names)print("bands :",bands)print("spins :",spin)print("k-points :",kpoints)# Access init class of ProcarFileFilter and pass two argumentsFileFilter=ProcarFileFilter(inFile,outFile)# for atomsifatoms:print("Manipulating the atoms")ifhuman_atoms:atoms=[[y-1foryinx]forxinatoms]print("new atoms list :",atoms)# Now just left to call the driver memberFileFilter.FilterAtoms(atoms)# for orbitalseliforbitals:print("Manipulating the orbitals")# If orbitals orbital_names is None, it needs to be fillediforbital_namesisNone:orbital_names=["o"+str(x)forxinrange(len(orbitals))]print("New orbitals names (default): ",orbital_names)# testing if makes senseiflen(orbitals)!=len(orbital_names):raiseRuntimeError("length of orbitals and orbitals names do not match")FileFilter.FilterOrbitals(orbitals,orbital_names)# for bandselifbands:print("Manipulating the bands")bmin=bands[0]bmax=bands[1]ifbmax<bmin:bmax,bmin=bmin,bmaxprint("New bands limits: ",bmin," to ",bmax)FileFilter.FilterBands(bmin,bmax)# for k-pointselifkpoints:print("Manipulating the k-points")kmin=kpoints[0]kmax=kpoints[1]ifkmax<kmin:kmax,kmin=kmin,kmaxprint("New k-points limits: ",kmin," to ",kmax)FileFilter.FilterKpoints(kmin,kmax)# for spinelifspin:print("Manipulating the spin")FileFilter.FilterSpin(spin)return