Files
CrystalPol/crystalpol/__main__.py

80 lines
2.0 KiB
Python

from crystalpol.polarization import Polarization
from crystalpol.shared.config import Config
from yaml.loader import SafeLoader
import yaml
from pathlib import Path
import setproctitle
import argparse
import logging
import sys
import os
from crystalpol.shared.utils import weekday_date_time
from crystalpol.shared.utils.log import Log
__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()