- Replace manual property updates with @cached_property for total_mass, com, and inertia_tensor - Introduce invalidate_computed_properties decorator to auto-invalidate cached properties on atom changes - Vectorize distances_between_atoms, sizes_of_molecule, and minimum_distance calculations using numpy - Unify and clarify center of mass and standard orientation methods (move_center_of_mass_to_origin, rotate_to_standard_orientation) - Remove redundant or outdated code, improve typing and error handling - Update dependent files and tests to use new method names and behaviors
70 lines
1.7 KiB
Python
70 lines
1.7 KiB
Python
from typing_extensions import Final
|
|
|
|
import gzip
|
|
import os
|
|
import shutil
|
|
import sys
|
|
import time
|
|
|
|
|
|
####################################### constants ######################################
|
|
|
|
|
|
BOHR2ANG: Final[float] = 0.52917721092
|
|
ANG2BOHR: Final[float] = 1 / BOHR2ANG
|
|
|
|
EA_2_DEBYE = 1 / 0.20819434
|
|
|
|
|
|
####################################### functions ######################################
|
|
|
|
|
|
def weekday_date_time():
|
|
return time.strftime("%A, %d %b %Y at %H:%M:%S")
|
|
|
|
|
|
def date_time():
|
|
return time.strftime("%d %b %Y at %H:%M:%S")
|
|
|
|
|
|
def compress_files_1mb(path):
|
|
working_dir = os.getcwd()
|
|
os.chdir(path)
|
|
|
|
files = filter(os.path.isfile, os.listdir(os.curdir))
|
|
for file in files:
|
|
if os.path.getsize(file) > 1024 * 1024: ## If bigger than 1MB
|
|
filegz = file + ".gz"
|
|
try:
|
|
with open(file, "rb") as f_in:
|
|
with gzip.open(filegz, "wb") as f_out:
|
|
shutil.copyfileobj(f_in, f_out)
|
|
except Exception as _:
|
|
sys.exit("Error: cannot compress file {}".format(file))
|
|
|
|
os.chdir(working_dir)
|
|
|
|
return
|
|
|
|
|
|
def make_step_dir(cycle):
|
|
sim_dir = "simfiles"
|
|
step_dir = "step{:02d}".format(cycle)
|
|
path = sim_dir + os.sep + step_dir
|
|
if os.path.exists(path):
|
|
sys.exit("Error: a file or directory {} already exists".format(step_dir))
|
|
try:
|
|
os.makedirs(path)
|
|
except Exception as _:
|
|
sys.exit("Error: cannot make directory {}".format(step_dir))
|
|
|
|
|
|
def make_qm_dir(cycle):
|
|
sim_dir = "simfiles"
|
|
step_dir = "step{:02d}".format(cycle)
|
|
path = sim_dir + os.sep + step_dir + os.sep + "qm"
|
|
try:
|
|
os.makedirs(path)
|
|
except Exception as _:
|
|
sys.exit("Error: cannot make directory {}".format(path))
|