From 3f05cc1caf2ef104ac0ad8f9e2d44ad619641880 Mon Sep 17 00:00:00 2001 From: robrobo Date: Fri, 26 Jun 2026 17:38:59 +0200 Subject: [PATCH] added pre-commit hooks; fixed whitespace and capitalization dependent parameter replacement; fixed creation of annealing and emin sim directories --- .editorconfig | 12 +++++ .gitignore | 3 +- .pre-commit-config.yaml | 28 ++++++++++++ README.md | 10 ++++- polyamorphism_optimization/annealing.py | 40 ++++++++++------- polyamorphism_optimization/create_sim.py | 36 ++++++++------- polyamorphism_optimization/emin.py | 36 ++++++++++----- .../generate_annealing.py | 45 ++++++++++++------- polyamorphism_optimization/initialize_sim.py | 31 ++++++------- polyamorphism_optimization/replace_params.py | 17 ++++--- polyamorphism_optimization/templates/NPT.ini | 1 + polyamorphism_optimization/templates/NVT.ini | 1 + .../templates/mdp_parameters.mdp | 22 ++++----- .../templates/params/annealing1.ini | 1 + .../templates/params/annealing2.ini | 1 + .../templates/params/emin.ini | 1 + .../templates/top_3point.top | 6 +-- .../templates/top_4point.top | 6 +-- .../templates/top_atomistic.top | 8 ++-- pyproject.toml | 14 ++++++ setup.cfg | 5 +++ 21 files changed, 224 insertions(+), 100 deletions(-) create mode 100644 .editorconfig create mode 100644 .pre-commit-config.yaml create mode 100644 setup.cfg diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..bb7eb17 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,12 @@ +# .editorconfig +root = true + +[*] +trim_trailing_whitespace = true + +# Disable for GROMACS template files +[*.mdp] +trim_trailing_whitespace = false + +[*.top] +trim_trailing_whitespace = false diff --git a/.gitignore b/.gitignore index 0c8bc9a..87e28c5 100644 --- a/.gitignore +++ b/.gitignore @@ -2,6 +2,8 @@ # gitignore template for Jupyter Notebooks # website: http://jupyter.org/ +.idea + .ipynb_checkpoints */.ipynb_checkpoints/* @@ -187,4 +189,3 @@ cython_debug/ # PyPI configuration file .pypirc - diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml new file mode 100644 index 0000000..3407074 --- /dev/null +++ b/.pre-commit-config.yaml @@ -0,0 +1,28 @@ +repos: + - repo: https://github.com/pre-commit/pre-commit-hooks + rev: v6.0.0 + hooks: + - id: trailing-whitespace + exclude: '\.(mdp|top)$' + - id: end-of-file-fixer + exclude: '\.(mdp|top)$' + - id: check-yaml + - id: check-added-large-files + + - repo: https://github.com/psf/black + rev: 26.5.1 + hooks: + - id: black + exclude: '\.(mdp|top)$' + + - repo: https://github.com/PyCQA/isort + rev: 9.0.0a3 + hooks: + - id: isort + exclude: '\.(mdp|top)$' + + - repo: https://github.com/PyCQA/flake8 + rev: 7.3.0 + hooks: + - id: flake8 + exclude: '\.(mdp|top)$' diff --git a/README.md b/README.md index d4fb671..6a966ba 100644 --- a/README.md +++ b/README.md @@ -1,3 +1,11 @@ # polyamorphism_optimization -Code snippets for creation of simulations, analysis, and optimized parameter search for liquids with polyamorphism. Goal is to find parameters for which dynamics is still fast at the critical point and the dynamic anomaly that follows can be studied more easily. \ No newline at end of file +Code snippets for creation of simulations, analysis, and optimized parameter search for liquids with polyamorphism. Goal is to find parameters for which dynamics is still fast at the critical point and the dynamic anomaly that follows can be studied more easily. + +#### Setting up pre-commit hooks +``` +pip install pre-commit +pre-commit autoupdate +pre-commit install +pre-commit run #--all-files +``` diff --git a/polyamorphism_optimization/annealing.py b/polyamorphism_optimization/annealing.py index 2c70d7e..fb03a70 100755 --- a/polyamorphism_optimization/annealing.py +++ b/polyamorphism_optimization/annealing.py @@ -1,40 +1,50 @@ -#!/usr/bin/env python3 +#!/usr/bin/env python3.12 import shutil +from importlib.resources import files from pathlib import Path + from generate_annealing import generate_annealing from replace_params import replace_params def main(root_dir: Path): - simdir = root_dir / "01_an1" + sim_dir = root_dir / "01_an1" - if simdir.exists(): - shutil.rmtree(simdir) - simdir.mkdir() + if sim_dir.exists(): + shutil.rmtree(sim_dir) + sim_dir.mkdir() # Copy topology and replace parameters - shutil.copy(root_dir / "topology.top", simdir / "topology.top") - replace_params(root_dir / "params.ini", root_dir / "topology.top", simdir / "topology.top") - replace_params(root_dir / "params_an1.ini", root_dir / "mdp_parameters.mdp", simdir / "mdp_parameters.mdp") - replace_params(root_dir / "params.ini", simdir / "mdp_parameters.mdp", simdir / "mdp_parameters.mdp") + shutil.copy(root_dir / "topology.top", sim_dir / "topology.top") + replace_params(root_dir / "params.ini", root_dir / "topology.top", sim_dir / "topology.top", upper=True, space=True) + + replace_params( + files("polyamorphism_optimization.templates.params") / "annealing1.ini", + root_dir / "mdp_parameters.mdp", + sim_dir / "mdp_parameters.mdp", + upper=True, + space=True, + ) + replace_params( + root_dir / "params.ini", sim_dir / "mdp_parameters.mdp", sim_dir / "mdp_parameters.mdp", upper=True, space=True + ) # Copy run.sh - shutil.copy(root_dir / "run.sh", simdir / "run.sh") + shutil.copy(root_dir / "run.sh", sim_dir / "run.sh") # Generate annealing section - annealing = generate_annealing(d=50, l=50, u=1000, s=50, e=2000) + annealing = generate_annealing(dT=50, Tmin=50, Tmax=1000, start_time=50, end_time=2000) # -d 20 -l 750 -u 2100 -s 50 -e 10000 -c - with (simdir / "mdp_parameters.mdp").open("a") as f: - f.write("\n") + with (sim_dir / "mdp_parameters.mdp").open("a") as f: f.write(annealing) - print(f"Annealing directory {simdir} created and filled.") + print(f"Annealing directory {sim_dir} created and filled.") if __name__ == "__main__": import sys + if len(sys.argv) != 2: print(f"Usage: {sys.argv[0]} ROOT_DIRECTORY") sys.exit(1) main(Path(sys.argv[1])) - diff --git a/polyamorphism_optimization/create_sim.py b/polyamorphism_optimization/create_sim.py index c41cbda..f35c1e7 100755 --- a/polyamorphism_optimization/create_sim.py +++ b/polyamorphism_optimization/create_sim.py @@ -1,14 +1,16 @@ -#!/usr/bin/python3.12 +#!/usr/bin/env python3.12 import argparse import configparser import math import os +import shutil +from importlib.resources import files +from pathlib import Path + def compute_dependent(params): - model = params["model"] - # Charge neutrality - params["charge_B"] = round(params["charge"]/2, 5) + params["charge_B"] = round(params["charge"] / 2, 5) params["charge_A"] = -2 * params["charge_B"] # Relative sigma and epsilon @@ -25,16 +27,16 @@ def compute_dependent(params): if params["mass"] is None: # Let total mass m = 2 * m_A, solve: τ = σ * sqrt(m/ε) ≈ 0.1 tau_target = 0.05 * 10 - m_total = (tau_target / sigma_A)**2 * epsilon_A + m_total = (tau_target / sigma_A) ** 2 * epsilon_A m_atom = m_total / 2 params["mass"] = round(m_atom, 5) - params["d_BB"] = round(2 * params["d_AB"] * math.sin(math.radians(params["angle_ABA"]) / 2), 5) params["dummy_ab"] = round(params["d_AM"] / (2 * math.cos(math.radians(params["angle_ABA"]) / 2)), 5) return params - + + def clean_params(params): if params["model"] != "4point": for k in ["r_AM", "d_AM", "d_BB", "dummy_ab"]: @@ -43,7 +45,8 @@ def clean_params(params): for k in ["r_AB", "d_AB", "angle_ABA"]: params.pop(k) return params - + + def format_directory_name(params): """Generate a short directory name from active parameters.""" keys_order = [ @@ -72,10 +75,9 @@ def format_directory_name(params): def main(): parser = argparse.ArgumentParser(description="Generate directory and parameter file for A-B molecular systems.") parser.add_argument("--version", type=int, default=1, help="Version identifier for parameter sweep") - parser.add_argument("--model", choices=["atomistic", "3point", "4point"], default='atomistic') + parser.add_argument("--model", choices=["atomistic", "3point", "4point"], default="atomistic") parser.add_argument("--pressure", type=float, default=1.0) - # Independent parameters parser.add_argument("--sigma", type=float, default=0.3) parser.add_argument("--epsilon", type=float, default=0.8) @@ -90,7 +92,7 @@ def main(): # Geometry for bonded/virtual_site parser.add_argument("--r_AB", type=float, default=0.33334) - parser.add_argument("--angle_ABA", type=float, default=109.5) # 104.52 + parser.add_argument("--angle_ABA", type=float, default=109.5) # 104.52 parser.add_argument("--r_AM", type=float, default=0.4) # Output @@ -113,13 +115,14 @@ def main(): "angle_ABA": args.angle_ABA, "r_AM": args.r_AM, } - + if params["model"] == "atomistic": + params["nmolb"] = 2 * params["nmol"] # Compute dependent values params = compute_dependent(params) params = clean_params(params) - - dir_name = format_directory_name(params) + + dir_name = Path(format_directory_name(params)) if os.path.exists(dir_name): print(f"Directory {dir_name} already exists. Aborting.") return @@ -129,11 +132,14 @@ def main(): config_path = os.path.join(dir_name, args.output) with open(config_path, "w") as f: config = configparser.ConfigParser() + config.optionxform = str # keep case sensitivity config["params"] = params config.write(f) print(f"Parameter file written to {config_path}") + shutil.copy(files("polyamorphism_optimization.templates") / "run.sh", dir_name / "run.sh") + + if __name__ == "__main__": main() - diff --git a/polyamorphism_optimization/emin.py b/polyamorphism_optimization/emin.py index 2b2aa6a..fce5051 100755 --- a/polyamorphism_optimization/emin.py +++ b/polyamorphism_optimization/emin.py @@ -1,35 +1,47 @@ -#!/usr/bin/env python3 +#!/usr/bin/env python3.12 import shutil +from importlib.resources import files from pathlib import Path + from replace_params import replace_params def main(root_dir: Path): - simdir = root_dir / "00_em" + sim_dir = root_dir / "00_em" - if simdir.exists(): - shutil.rmtree(simdir) - simdir.mkdir() + if sim_dir.exists(): + shutil.rmtree(sim_dir) + sim_dir.mkdir() # Copy topology and replace parameters - shutil.copy(root_dir / "topology.top", simdir / "topology.top") - replace_params(root_dir / "params.ini", root_dir / "topology.top", simdir / "topology.top") - replace_params(root_dir / "params_emin.ini", root_dir / "mdp_parameters.mdp", simdir / "mdp_parameters.mdp") - replace_params(root_dir / "params.ini", simdir / "mdp_parameters.mdp", simdir / "mdp_parameters.mdp") + shutil.copy(root_dir / "topology.top", sim_dir / "topology.top") + replace_params(root_dir / "params.ini", root_dir / "topology.top", sim_dir / "topology.top", upper=True, space=True) + + replace_params( + files("polyamorphism_optimization.templates.params") / "emin.ini", + root_dir / "mdp_parameters.mdp", + sim_dir / "mdp_parameters.mdp", + upper=True, + space=True, + ) + replace_params( + root_dir / "params.ini", sim_dir / "mdp_parameters.mdp", sim_dir / "mdp_parameters.mdp", upper=True, space=True + ) # Copy run.sh - shutil.copy(root_dir / "run.sh", simdir / "run.sh") + shutil.copy(root_dir / "run.sh", sim_dir / "run.sh") # Add finer emstep - with (simdir / "mdp_parameters.mdp").open("a") as f: + with (sim_dir / "mdp_parameters.mdp").open("a") as f: f.write("\n") f.write("emstep = 0.001") - print(f"Energy minimization directory {simdir} created and filled.") + print(f"Energy minimization directory {sim_dir} created and filled.") if __name__ == "__main__": import sys + if len(sys.argv) != 2: print(f"Usage: {sys.argv[0]} ROOT_DIRECTORY") sys.exit(1) diff --git a/polyamorphism_optimization/generate_annealing.py b/polyamorphism_optimization/generate_annealing.py index 8a811d6..25e9518 100755 --- a/polyamorphism_optimization/generate_annealing.py +++ b/polyamorphism_optimization/generate_annealing.py @@ -1,7 +1,8 @@ -#!/usr/bin/python3.12 +#!/usr/bin/env python3.12 import argparse import math + def round_dynamic(x, rel_tol=1e-3, max_decimals=6, max_negative_decimals=3): """ Dynamically round x so that the relative error is within rel_tol. @@ -23,6 +24,7 @@ def round_dynamic(x, rel_tol=1e-3, max_decimals=6, max_negative_decimals=3): factor = 10 ** (-decimals) return round(x / factor) * factor + def generate_temperature_list_dynamic(dT=10, Tmin=10, Tmax=5000, rel_tol=5e-3): r = (300 - dT) / 300.0 @@ -49,16 +51,18 @@ def generate_temperature_list_dynamic(dT=10, Tmin=10, Tmax=5000, rel_tol=5e-3): rounded_T = [round_dynamic(t, rel_tol=rel_tol) for t in all_T] return rounded_T - + + def generate_temperature_list(dT=10, Tmin=10, Tmax=5000, rel_tol=5e-3): - r = (Tmax/Tmin)**(1/20) - all_T = [Tmin*r**i for i in range(21)] + r = (Tmax / Tmin) ** (1 / 20) + all_T = [Tmin * r**i for i in range(21)] # Apply dynamic rounding rounded_T = [round_dynamic(t, rel_tol=rel_tol) for t in all_T] return rounded_T + def generate_times_list(npoints, start_time, end_time): if npoints == 1: return [0.0] @@ -66,6 +70,7 @@ def generate_times_list(npoints, start_time, end_time): interval = duration / (npoints - 1) return [round(start_time + i * interval, 3) for i in range(npoints)] + def main(): parser = argparse.ArgumentParser(description="Generate annealing times and temperatures for GROMACS.") parser.add_argument("-d", "--dT", type=float, default=20.0, help="Temperature step size") @@ -74,25 +79,35 @@ def main(): parser.add_argument("-r", "--rel_tol", type=float, default=5e-3, help="Relative tolerance for rounding") parser.add_argument("-s", "--start_time", type=float, default=0, help="Start time in fs") parser.add_argument("-e", "--end_time", type=float, required=True, help="End time in fs") - parser.add_argument("-c", "--cooling", action='store_true', help="Do cooling instead of heating") + parser.add_argument("-c", "--cooling", action="store_true", help="Do cooling instead of heating") args = parser.parse_args() + annealing = generate_annealing(args.e, args.d, args.l, args.u, args.r, args.c, args.s) + print(annealing) - #temps = generate_temperature_list_dynamic(args.dT, args.Tmin, args.Tmax, args.rel_tol) - temps = generate_temperature_list(args.dT, args.Tmin, args.Tmax, args.rel_tol) - if args.cooling: + +def generate_annealing(end_time, dT=20, Tmin=10, Tmax=5000, rel_tol=5e-3, cooling=False, start_time=0): + + # temps = generate_temperature_list_dynamic(args.dT, args.Tmin, args.Tmax, args.rel_tol) + temps = generate_temperature_list(dT, Tmin, Tmax, rel_tol) + if cooling: temps = list(reversed(temps)) - if args.start_time > 0: + if start_time > 0: temps = [temps[0]] + temps # hold first temperature - times = [0.0] + generate_times_list(len(temps) - 1, args.start_time, args.end_time) + times = [0.0] + generate_times_list(len(temps) - 1, start_time, end_time) else: - times = generate_times_list(len(temps), args.start_time, args.end_time) + times = generate_times_list(len(temps), start_time, end_time) + + annealing_config = f""" +annealing = single +annealing-npoints = {len(times)} +annealing-time = {" ".join(f'{t:.3f}' for t in times)} +annealing-temp = {" ".join(f'{t:.2f}' for t in temps)} +""" + + return annealing_config - print("annealing = single") - print(f"annealing-npoints = {len(times)}") - print("annealing-time = " + " ".join(f"{t:.3f}" for t in times)) - print("annealing-temp = " + " ".join(f"{t:.2f}" for t in temps)) if __name__ == "__main__": main() diff --git a/polyamorphism_optimization/initialize_sim.py b/polyamorphism_optimization/initialize_sim.py index 79fd347..98c13f7 100755 --- a/polyamorphism_optimization/initialize_sim.py +++ b/polyamorphism_optimization/initialize_sim.py @@ -1,10 +1,9 @@ -#!/usr/bin/env python3 +#!/usr/bin/env python3.12 import argparse -import os -import subprocess -from pathlib import Path -from importlib.resources import files import configparser +import os +from importlib.resources import files +from pathlib import Path from annealing import main as annealing from emin import main as emin @@ -12,19 +11,19 @@ from emin import main as emin # --- Core function --- def initialize_simulation_dir(directory: Path): - os.chdir(directory) - - params = configparser.ConfigParser() - params = params.read('params.ini') + directory = Path(directory) - template_path = files("polyamorphism_optimization.templates") / f"topology_{params['model']}.top" + params = configparser.ConfigParser() + params.read(directory / "params.ini") + + template_path = files("polyamorphism_optimization.templates") / f"top_{params['params']['model']}.top" TOPOLOGY = template_path.read_text() template_path = files("polyamorphism_optimization.templates") / "mdp_parameters.mdp" MDP_PARAMETERS = template_path.read_text() - + # Write files - Path("mdp_parameters.mdp").write_text(MDP_PARAMETERS) - Path("topology.top").write_text(TOPOLOGY) + Path(directory / "mdp_parameters.mdp").write_text(MDP_PARAMETERS) + Path(directory / "topology.top").write_text(TOPOLOGY) emin(directory) annealing(directory) @@ -33,14 +32,16 @@ def initialize_simulation_dir(directory: Path): for f in os.listdir(directory): print(f) + # --- CLI entry point --- def main(): parser = argparse.ArgumentParser(description="Create simulation input files.") parser.add_argument("-d", "--directory", default=".", help="Base directory") args = parser.parse_args() - create_simulation_dir(Path(args.directory)) + # create_simulation_dir(Path(args.directory)) + initialize_simulation_dir(Path(args.directory)) + if __name__ == "__main__": main() - diff --git a/polyamorphism_optimization/replace_params.py b/polyamorphism_optimization/replace_params.py index cb804e7..c716ffb 100755 --- a/polyamorphism_optimization/replace_params.py +++ b/polyamorphism_optimization/replace_params.py @@ -1,10 +1,10 @@ -#!/usr/bin/env python3 -import sys +#!/usr/bin/env python3.12 import configparser +import sys from pathlib import Path -def replace_params(param_file: Path, template_file: Path, output_file: Path): +def replace_params(param_file: Path, template_file: Path, output_file: Path, upper=False, space=False): """Replace placeholders in template_file with values from an INI file.""" config = configparser.ConfigParser() config.optionxform = str # keep case sensitivity @@ -14,7 +14,15 @@ def replace_params(param_file: Path, template_file: Path, output_file: Path): params = {} for section in config.sections(): for key, value in config.items(section): - params[key] = value + if upper: + params[key.upper()] = value + else: + params[key] = value + + if space: + for key, value in dict(params.items()).items(): + params[f" {key} "] = value + params.pop(key) content = template_file.read_text() @@ -38,4 +46,3 @@ def main(): if __name__ == "__main__": main() - diff --git a/polyamorphism_optimization/templates/NPT.ini b/polyamorphism_optimization/templates/NPT.ini index 7aeb8d1..45596b7 100644 --- a/polyamorphism_optimization/templates/NPT.ini +++ b/polyamorphism_optimization/templates/NPT.ini @@ -1,3 +1,4 @@ +[mdp] INTEGRATOR = md NSTEPS = 2000000 NLOG = 1000 diff --git a/polyamorphism_optimization/templates/NVT.ini b/polyamorphism_optimization/templates/NVT.ini index 86ed9dd..ee46d4c 100644 --- a/polyamorphism_optimization/templates/NVT.ini +++ b/polyamorphism_optimization/templates/NVT.ini @@ -1,3 +1,4 @@ +[mdp] INTEGRATOR = md NSTEPS = 2000000 NLOG = 1000 diff --git a/polyamorphism_optimization/templates/mdp_parameters.mdp b/polyamorphism_optimization/templates/mdp_parameters.mdp index a1607a2..b807453 100644 --- a/polyamorphism_optimization/templates/mdp_parameters.mdp +++ b/polyamorphism_optimization/templates/mdp_parameters.mdp @@ -1,11 +1,11 @@ -integrator = INTEGRATOR +integrator = INTEGRATOR dt = 0.001 -nsteps = NSTEPS +nsteps = NSTEPS nstcomm = 10 -nstlog = NLOG +nstlog = NLOG nstcalcenergy = 10 -nstenergy = NENERGY -nstxout-compressed = NSTXOUT +nstenergy = NENERGY +nstxout-compressed = NSTXOUT compressed-x-precision = 1000 energygrps = system rlist = 1.2 @@ -18,14 +18,14 @@ rvdw = 1.2 vdw-modifier = potential-shift-verlet fourierspacing = 0.144 tcoupl = v-rescale -tau_t = TAUT +tau_t = TAUT gen_vel = yes -gen_temp = TEMP -ref_t = TEMP +gen_temp = TEMP +ref_t = TEMP tc-grps = system -pcoupl = PCOUPL -tau_p = TAUP -ref_p = PRESSURE +pcoupl = PCOUPL +tau_p = TAUP +ref_p = PRESSURE compressibility = 4.5e-5 nstpcouple = 10 nsttcouple = 10 diff --git a/polyamorphism_optimization/templates/params/annealing1.ini b/polyamorphism_optimization/templates/params/annealing1.ini index 0d49ba8..5699936 100644 --- a/polyamorphism_optimization/templates/params/annealing1.ini +++ b/polyamorphism_optimization/templates/params/annealing1.ini @@ -1,3 +1,4 @@ +[mdp] INTEGRATOR = md NSTEPS = 2000000 NLOG = 1000 diff --git a/polyamorphism_optimization/templates/params/annealing2.ini b/polyamorphism_optimization/templates/params/annealing2.ini index 47fee70..71f3989 100644 --- a/polyamorphism_optimization/templates/params/annealing2.ini +++ b/polyamorphism_optimization/templates/params/annealing2.ini @@ -1,3 +1,4 @@ +[mdp] INTEGRATOR = md NSTEPS = 5000000 NLOG = 1000 diff --git a/polyamorphism_optimization/templates/params/emin.ini b/polyamorphism_optimization/templates/params/emin.ini index e2a8ae4..e3a94ae 100644 --- a/polyamorphism_optimization/templates/params/emin.ini +++ b/polyamorphism_optimization/templates/params/emin.ini @@ -1,3 +1,4 @@ +[mdp] INTEGRATOR = steep NSTEPS = 10000 NLOG = 100 diff --git a/polyamorphism_optimization/templates/top_3point.top b/polyamorphism_optimization/templates/top_3point.top index e5cef22..86cd3d6 100644 --- a/polyamorphism_optimization/templates/top_3point.top +++ b/polyamorphism_optimization/templates/top_3point.top @@ -3,15 +3,15 @@ 1 2 yes 1.0 1.0 [atomtypes] ;name mass charge ptype sigma epsilon -A MASS 0.000 A SIGMA_A EPSILON_A -B MASS 0.000 A SIGMA_B EPSILON_B +A MASS 0.000 A SIGMA_A EPSILON_A +B MASS 0.000 A SIGMA_B EPSILON_B [moleculetype] ; name nrexcl L 1 [atoms] -; nr type resnr residu atom cgnr charge +; nr type resnr residu atom cgnr charge mass 1 A 1 L A 1 CHARGE_A MASS 2 B 1 L B1 1 CHARGE_B MASS 3 B 1 L B2 1 CHARGE_B MASS diff --git a/polyamorphism_optimization/templates/top_4point.top b/polyamorphism_optimization/templates/top_4point.top index 0bc968b..a4f4a52 100644 --- a/polyamorphism_optimization/templates/top_4point.top +++ b/polyamorphism_optimization/templates/top_4point.top @@ -3,8 +3,8 @@ 1 2 yes 1.0 1.0 [atomtypes] ;name mass charge ptype sigma epsilon -A MASS 0.000 A SIGMA_A EPSILON_A -B MASS 0.000 A SIGMA_B EPSILON_B +A MASS 0.000 A SIGMA_A EPSILON_A +B MASS 0.000 A SIGMA_B EPSILON_B D 0 0.000 D 0.0 0.0 [moleculetype] @@ -12,7 +12,7 @@ D 0 0.000 D 0.0 0.0 L 1 [atoms] -; nr type resnr residu atom cgnr charge +; nr type resnr residu atom cgnr charge mass 1 A 1 L A 1 0 MASS 2 B 1 L B1 1 CHARGE_B MASS 3 B 1 L B2 1 CHARGE_B MASS diff --git a/polyamorphism_optimization/templates/top_atomistic.top b/polyamorphism_optimization/templates/top_atomistic.top index bb5cd42..e06a404 100644 --- a/polyamorphism_optimization/templates/top_atomistic.top +++ b/polyamorphism_optimization/templates/top_atomistic.top @@ -12,7 +12,7 @@ B MASS 0.000 A SIGMA_B EPSILON_B A 1 [atoms] -; nr type resnr residu atom cgnr charge +; nr type resnr residu atom cgnr charge mass 1 A 1 L A 1 CHARGE_A MASS [moleculetype] @@ -20,12 +20,12 @@ A 1 B 1 [atoms] -; nr type resnr residu atom cgnr charge +; nr type resnr residu atom cgnr charge mass 1 B 1 L B 1 CHARGE_B MASS [system] MODEL [molecules] -A NMOL -B NMOLB +A NMOL +B NMOLB diff --git a/pyproject.toml b/pyproject.toml index 3f90bcd..eaac95f 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -22,3 +22,17 @@ po_init_sim = "polyamorphism_optimization.initialize_sim:main" [tool.setuptools.package-data] polyamorphism_optimization = ["templates/*"] +[tool.black] +line-length = 120 +target-version = ["py312"] +exclude = ''' +( + \.mdp + | \.top +) +''' + +[tool.isort] +profile = "black" # Makes isort compatible with black's formatting +line_length = 120 +extend_skip_glob = ["*.mdp", "*.top"] diff --git a/setup.cfg b/setup.cfg new file mode 100644 index 0000000..7af1c73 --- /dev/null +++ b/setup.cfg @@ -0,0 +1,5 @@ +[flake8] +max-line-length = 120 +exclude = + *.mdp, + *.top