def core_phasespace(geom1, geom2, sym_factor, stoich, pot_prefactor=10.0, pot_exp=6.0, tstlvl='e'): """ Writes the string that defines the `Core` section for a phase space theory model of a transition state for a MESS input file by formatting input information into strings a filling Mako template. :param geom1: geometry of the dissociation species 1 :type geom1: list :param geom2: geometry of the dissociation species 2 :type geom2: list :param sym_factor: symmetry factor of transition state :type sym_factor: float :param stoich: combined stoichiometry of dissociation species 1 and 2 :type stoich: str :param pot_prefator: factor C0 in potential expression V = -C0/R^n (au) :type pot_prefactor: float :param pot_exp: power n in potential expression V = -C0/R^n (au) :type pot_exp: float :param tstlvl: level to resolve the rate constant :type tstlvl: str :rtype: str """ assert tstlvl in ('e', 'ej', 't') # Format the geometry section of each fragment natom1, geom1 = util.geom_format(geom1) natom2, geom2 = util.geom_format(geom2) # Indent the geometry strings geom1 = indent(geom1, 2) geom2 = indent(geom2, 2) # Format the tstlvl string assert tstlvl in ('e', 'ej', 't') tstlvl = tstlvl.upper() # Create dictionary to fill template core_keys = { 'sym_factor': sym_factor, 'natom1': natom1, 'geom1': geom1, 'natom2': natom2, 'geom2': geom2, 'stoich': stoich, 'pot_prefactor': pot_prefactor, 'pot_exp': pot_exp, 'tstlvl': tstlvl } return build_mako_str(template_file_name='core_phasespace.mako', template_src_path=SPEC_INFO_PATH, template_keys=core_keys)
def core_rigidrotor(geom, sym_factor, interp_emax=None): """ Writes the string that defines the 'Core' section for a rigid-rotor model of a species for a MESS input file by formatting input information into strings a filling Mako template. :param geom: geometry of species :type geom: list :param sym_factor: symmetry factor of species :type sym_factor: float :param interp_emax: max energy to calculate num. of states (kcal.mol-1) :type interp_emax: float :rtype: str """ # Format the geometry section natom, geom = util.geom_format(geom) # Create dictionary to fill template core_keys = { 'sym_factor': sym_factor, 'natom': natom, 'geom': geom, 'interp_emax': interp_emax } return build_mako_str(template_file_name='core_rigidrotor.mako', template_src_path=SPEC_INFO_PATH, template_keys=core_keys)
def rotor_hindered(group, axis, symmetry, potential, remdummy=None, geom=None, use_quantum_weight=False, rotor_id=''): """ Writes the string that defines the `Rotor` section for a single hindered rotor of a species for a MESS input file by formatting input information into strings a filling Mako template. :param group: idxs for the atoms of one of the rotational groups :type group: list(int) :param axis: idxs for the atoms that make up the rotational axis :type axis: list(int) :param symmetry: overall symmetry of the torsional motion (potential) :type symmetry: int :param potential: value of the potential along torsion (kcal.mol-1) :type potential: list(float) :param remdummy: list of idxs of dummy atoms for shifting values :type remdummy: list(int) :param geom: geometry of the species the rotor exists for :type geom: list :param use_quantum_weight: toggle weigthing of quantum effects :type use_quantum_weight: bool :param rotor_id: name associated with the rotor :type rotor_id: str :rtype: str """ # Format the rotor sections rotor_group = util.format_rotor_key_defs(group, remdummy) rotor_axis = util.format_rotor_key_defs(axis, remdummy) rotor_npotential, rotor_potential = util.format_rotor_potential(potential) # Format the geom natom = 1 if geom is not None: natom, geom = util.geom_format(geom) geom = indent(geom, 4) # Create dictionary to fill template rotor_keys = { 'group': rotor_group, 'axis': rotor_axis, 'symmetry': symmetry, 'npotential': rotor_npotential, 'potential': rotor_potential, 'natom': natom, 'geom': geom, 'use_quantum_weight': use_quantum_weight, 'rotor_id': rotor_id } return build_mako_str(template_file_name='rotor_hindered.mako', template_src_path=SPEC_INFO_PATH, template_keys=rotor_keys)
def core_multirotor(geom, sym_factor, pot_surf_file, int_rot_str, interp_emax=100, quant_lvl_emax=9): """ Writes the string that defines the `Core` section for a multidimensional rotor model of a species for a MESS input file by formatting input information into strings a filling Mako template. :param geom: geometry of species :type geom: list :param sym_factor: symmetry factor of species :type sym_factor: float :param pot_surf_file: name of file with PES along rotor (kcal.mol-1) :type pot_sur_file: str :param int_rot_str: MESS-format strings that define internal rotors :type int_rot_str: str :param interp_emax: max energy to calculate density/number of states :type interp_emax: float :param quant_lvl_emax: max energy to calculate quantum energy levels :type quant_lvl_emax: float :rtype: str """ # Format the geometry section natom, geom = util.geom_format(geom) # Indent the internal rotor string int_rot_str = indent(int_rot_str, 2) # Create dictionary to fill template core_keys = { 'sym_factor': sym_factor, 'natom': natom, 'geom': geom, 'pot_surf_file': pot_surf_file, 'int_rot': int_rot_str, 'interp_emax': interp_emax, 'quant_lvl_emax': quant_lvl_emax } return build_mako_str(template_file_name='core_multirotor.mako', template_src_path=SPEC_INFO_PATH, template_keys=core_keys)
def umbrella_mode(group, plane, ref_atom, potential, remdummy=None, geom=None): """ Writes the string that defines the `Umbrella` section for a single umbrella mode of a species for a MESS input file by formatting input information into strings a filling Mako template. :param group: idxs for the atoms of ? :type group: list(int) :param axis: idxs for the atoms that ? :type axis: list(int) :param remdummy: list of idxs of dummy atoms for shifting values :type remdummy: list(int) :param geom: geometry of the species the umbrella mode exists for :type geom: list :rtype: str """ # Format the sections umbr_group = util.format_rotor_key_defs(group, remdummy) umbr_plane = util.format_rotor_key_defs(plane, remdummy) umbr_npotential, umbr_potential = util.format_rotor_potential(potential) # Format the geom if geom is not None: natom, geom = util.geom_format(geom) geom = indent(geom, 4) else: natom = None # Create dictionary to fill template umbr_keys = { 'group': umbr_group, 'axis': umbr_plane, 'ref_atom': ref_atom, 'npotential': umbr_npotential, 'potential': umbr_potential, 'natom': natom, 'geom': geom, } return build_mako_str(template_file_name='umbrella_mode.mako', template_src_path=SPEC_INFO_PATH, template_keys=umbr_keys)
def rotor_internal(group, axis, symmetry, grid_size, mass_exp_size, pot_exp_size=5, hmin=13, hmax=101, remdummy=None, geom=None, rotor_id=''): """ Writes the string that defines the `Rotor` section for a single internal rotor of a species for a MESS input file by formatting input information into strings a filling Mako template. :param group: idxs for the atoms of one of the rotational groups :type group: list(int) :param axis: idxs for the atoms that make up the rotational axis :type axis: list(int) :param symmetry: overall symmetry of the torsional motion (potential) :type symmetry: int :param grid_size: grid_size for statistical weight calculation :type grid_size: int :param mass_exp_size: num. mass expansion Fourier harmonics :type mass_exp_size: int :param pot_exp_size: num. potential expansion Fourier harmonics :type pot_exp_size: int :param hmin: minimum value for quantum phase space dimension :type hmin: int :param hmax: maximum value for quantum phase space dimension :type hmax: int :param remdummy: list of idxs of dummy atoms for shifting values :type remdummy: list(int) :param geom: geometry of the species the rotor exists for :type geom: list :param rotor_id: name associated with the rotor :type rotor_id: str :rtype: str """ assert mass_exp_size > 0 and mass_exp_size % 2 == 1 assert pot_exp_size > 0 and pot_exp_size % 2 == 1 # Format the sections rotor_group = util.format_rotor_key_defs(group, remdummy) rotor_axis = util.format_rotor_key_defs(axis, remdummy) # Format the geom if geom is not None: natom, geom = util.geom_format(geom) geom = indent(geom, 4) else: natom = None # Create dictionary to fill template rotor_keys = { 'group': rotor_group, 'axis': rotor_axis, 'symmetry': symmetry, 'mass_exp_size': mass_exp_size, 'pot_exp_size': pot_exp_size, 'hmin': hmin, 'hmax': hmax, 'grid_size': grid_size, 'natom': natom, 'geom': geom, 'rotor_id': rotor_id } return build_mako_str(template_file_name='rotor_internal.mako', template_src_path=SPEC_INFO_PATH, template_keys=rotor_keys)
def rotor_hindered(group, axis, symmetry, potential, hmin=None, hmax=None, lvl_ene_max=None, therm_pow_max=None, remdummy=None, geom=None, rotor_id=''): """ Writes the string that defines the `Rotor` section for a single hindered rotor of a species for a MESS input file by formatting input information into strings a filling Mako template. :param group: idxs for the atoms of one of the rotational groups :type group: list(int) :param axis: idxs for the atoms that make up the rotational axis :type axis: list(int) :param symmetry: overall symmetry of the torsional motion (potential) :type symmetry: int :param hmin: minimum value for quantum phase space dimension :type hmin: int :param hmax: maximum value for quantum phase space dimension :type hmax: int :param potential: value of the potential along torsion (kcal.mol-1) :type potential: list(float) :param therm_pow_max: max exp't power in Boltzmann weight :type therm_pow_max: int :param remdummy: list of idxs of dummy atoms for shifting values :type remdummy: list(int) :param geom: geometry of the species the rotor exists for :type geom: list :param rotor_id: name associated with the rotor :type rotor_id: str :rtype: str """ # Format the rotor sections rotor_group = util.format_rotor_key_defs(group, remdummy) rotor_axis = util.format_rotor_key_defs(axis, remdummy) rotor_npotential, rotor_potential = util.format_rotor_potential(potential) # Format the geom natom = 1 if geom is not None: natom, geom = util.geom_format(geom) geom = indent(geom, 4) # Create dictionary to fill template rotor_keys = { 'group': rotor_group, 'axis': rotor_axis, 'symmetry': symmetry, 'npotential': rotor_npotential, 'potential': rotor_potential, 'hmin': hmin, 'hmax': hmax, 'lvl_ene_max': lvl_ene_max, 'therm_pow_max': therm_pow_max, 'natom': natom, 'geom': geom, 'rotor_id': rotor_id } return build_mako_str(template_file_name='rotor_hindered.mako', template_src_path=SPEC_INFO_PATH, template_keys=rotor_keys)