import math
import copy
from geom.classes import molecule
from geom.functions import tools, general, output
# -------------------------------------------------------------------------------------
[docs]
def select_case(inp):
"""
Selects and executes a small task based on user input.
Args:
inp (input_class): An instance containing input parameters.
Returns:
None: Calls the corresponding function.
Notes:
- Supports calculating the minimum distance, geometrical center,
specular transformation, and merging geometries.
"""
if (inp.min_dist): min_dist(inp)
if (inp.geom_center): geom_center(inp)
if (inp.geom_specular): geom_specular(inp)
if (inp.merge): merge_geoms(inp)
if (inp.create_dimer): create_dimer(inp)
# -------------------------------------------------------------------------------------
[docs]
def min_dist(inp):
"""
Computes the minimum distance between two molecular geometries.
Args:
inp (input_class): An instance containing input parameters.
Returns:
None: Prints the calculated minimum distance.
Notes:
- Reads the geometries of two molecules from input files.
- Uses `calc_min_distance` from `tools.py` to determine the minimum distance.
- Outputs the result via `output.print_min_dist()`.
"""
# Check input
inp.check_input_case()
# Initialize molecules and read geometries
mol_1 = molecule.molecule()
mol_2 = molecule.molecule()
mol_1.read_geom(inp.geom1_file,False)
mol_2.read_geom(inp.geom2_file,False)
# Calc min distance
distance = tools.calc_min_distance(mol_1,mol_2)
# Print calculated minimum distance
output.print_min_dist(inp,distance)
# -------------------------------------------------------------------------------------
[docs]
def geom_center(inp):
"""
Calculates the geometrical center of a molecule.
Args:
inp (input_class): An instance containing input parameters.
Returns:
None: Prints the geometrical center coordinates.
Notes:
- Reads the molecular geometry from an input file.
- Computes the center using the molecule’s atomic coordinates.
- Outputs the computed center via `output.print_geom_center()`.
"""
# Check input
inp.check_input_case()
# Initialize molecule and read geometry
mol = molecule.molecule()
mol.read_geom(inp.geom_file,False)
output.print_geom_center(inp,mol.xyz_center)
# -------------------------------------------------------------------------------------
[docs]
def geom_specular(inp):
"""
Creates a specular (mirror image) geometry of a molecule.
Args:
inp (input_class): An instance containing input parameters.
Returns:
None: Saves the mirrored geometry.
Notes:
- Reads the molecular geometry from an input file.
- Reflects the molecule across the x-axis.
- Translates the mirrored molecule by a shift distance (5 Å + molecule width).
- Saves the new geometry file.
"""
# Check input
inp.check_input_case()
general.create_results_geom()
#out_log = output.logfile_init()
# Initialize molecule and read geometry
mol = molecule.molecule()
mol.read_geom(inp.geom_file,True)
# Create specular geometry along x and move at 5 Å
shift = (mol.xyz_max[0] - mol.xyz_min[0]) + 5.0
dir_factor = [1.0,0.0,0.0]
mol.xyz[0,:] = -mol.xyz[0,:]
mol.translate_geom(shift,dir_factor)
# Save specular geometry
output.print_geom(mol, inp.geom_file[:-4]+'_000_mirror')
# Close and save logfile
#output.logfile_close(out_log)
# -------------------------------------------------------------------------------------
[docs]
def merge_geoms(inp):
"""
Merges two molecular geometries into a single structure.
Args:
inp (input_class): An instance containing input parameters.
Returns:
None: Saves the merged geometry.
Notes:
- Reads two molecular geometries from input files.
- Uses `merge_geoms` from `tools.py` to combine the structures.
- Saves the merged structure to an output file.
"""
# Check input
inp.check_input_case()
general.create_results_geom()
#out_log = output.logfile_init()
# Initialize molecules and read geometries
mol_1 = molecule.molecule()
mol_2 = molecule.molecule()
mol_1.read_geom(inp.geom1_file,False)
mol_2.read_geom(inp.geom2_file,False)
# Merge two geometries
mol_3 = tools.merge_geoms(inp,mol_1,mol_2)
# Save merged geometry
file_geom_merged = f"{inp.geom1_file[:-4]}_MERGED_{inp.geom2_file[:-4]}"
output.print_geom(mol_3, file_geom_merged)
# Close and save logfile
output.logfile_close(out_log)
# -------------------------------------------------------------------------------------