from crystalpol.polarization import Polarization from crystalpol.shared.config import Config from crystalpol.shared.utils.log import Log from yaml.loader import SafeLoader from pathlib import Path import setproctitle import argparse import logging import yaml import os __VERSION = "v0.0.1" os.nice(+19) setproctitle.setproctitle("crystalpol-{}".format(__VERSION)) def main(): """ Read and store the arguments passed to the program and set the usage and help messages. """ parser = argparse.ArgumentParser(prog="CrystalPol") parser.add_argument( "-v", "--version", action="version", version=f"crystalpol-{__VERSION}" ) parser.add_argument( "-c", "--config", dest="config", default="config.yml", metavar="INFILE", help="Config file of crystalpol [default = config.yml]" ) parser.add_argument( "-i", "--input", dest="infile", default="crystal.xyz", metavar="INFILE", help="Input file of crystalpol [default = crystal.xyz]" ) parser.add_argument( "-o", "--output", dest="outfile", default="run.log", metavar="OUTFILE", help="Output file of crystalpol [default = run.log]" ) args = parser.parse_args() log_file = Path("run.log") if log_file.exists(): log_file.rename(log_file.with_suffix(".log.backup")) logging.basicConfig( filename=args.outfile, format='%(message)s', level=logging.INFO ) try: with open(args.config) as file: data = yaml.load(file, Loader=SafeLoader) config = Config(**data.get('crystal_pol')) except IOError: raise RuntimeError('Invalid or Missing Config File.') Log.make_header(__VERSION, config.to_dict()) pol = Polarization(args.infile, args.outfile, config) pol.run() if __name__ == "__main__": main()