Source code for schrodinger.application.matsci.msprops

"""
Constants for CT-level properties.

Copyright Schrodinger, LLC. All rights reserved.
"""
import enum

from schrodinger import structure
from schrodinger.infra import mm

# Importing matsci modules here should be avoided to prevent circular importing

# General properties
SOURCE_FILE_PROP = 's_m_Source_File'
SOURCE_PATH_PROP = 's_m_Source_Path'
ENTRY_ID_PROP = mm.M2IO_DATA_CT_ENTRY_ID  # s_m_entry_id
ENTRY_NAME_PROP = mm.M2IO_DATA_CT_ENTRY_NAME  # s_m_entry_name
TITLE_PROP = mm.M2IO_DATA_CT_TITLE  # s_m_title
ORIGINAL_CMS_PROP = mm.M2IO_DATA_ORIGINAL_CMS_FILE  # s_m_original_cms_file
TRAJECTORY_FILE_PROP = mm.M2IO_DATA_TRAJECTORY_FILE  # s_chorus_trajectory_file
STRUCTURE_WAM_PROP = 's_m_hidden_workflow_menu'
SUBDIRECTORY_PROP = 's_matsci_subdirectory'
JAGUAR_SPM_PROP = 's_matsci_Jaguar_Spectrum_File'
WORKFLOW_FAILURE_FILE_PROP = 's_matsci_Failed_Workflows_File'
STEP_SUCCESS_START = 'b_matsci_Successful_'
STEP_SUCCESS_PROP = STEP_SUCCESS_START + '{stepname}'
# Set this property to the name of another property. The value of that
# property will be displayed as a bond label.
SHOW_BOND_LABEL_PROP = 's_m_bond_label_format'

# Meta Workflow
PARENT_SUBDIRECTORY = 's_matsci_Parent_Subdirectory'
REQUIRES_SUBDIRECTORIES = 's_matsci_Requires_Subdirectories'

PROP_FAMILY = enum.Enum('PROP_FAMILY', 'matsci user')

# General Materials Science properties
MATSCI_PROPERTY_BASE = PROP_FAMILY.matsci.name
MATSCI_FLOAT_BASE = 'r_%s' % PROP_FAMILY.matsci.name

# Coarse-grain
CG_REP_TYPE = 'CG'
REP_TYPE_KEY = 's_matsci_rep_type'

# Used to designate structures that should not show up in the property viewer
CHILD_STRUCTURE = 'b_%s_Child_Structure' % MATSCI_PROPERTY_BASE
CALCULATION_MODE = 's_%s_Calculation_Mode' % MATSCI_PROPERTY_BASE

# Electrolyte properties
ELECTROLYTE_PROPERTY_BASE = 'matsci_elyte'

# Optoelectronic properties
OE_PROPERTY_BASE = 'matsci_optelec'
OE_OXIDATION = 'r_%s_Oxidation_Potential_(eV)' % OE_PROPERTY_BASE
OE_REDUCTION = 'r_%s_Reduction_Potential_(eV)' % OE_PROPERTY_BASE
OE_HOLE_REORG = 'r_%s_Hole_Reorganization_Energy_(eV)' % OE_PROPERTY_BASE
OE_HOLE_SPE = ('r_%s_Hole_Small_Polaron_Stabilization_Energy_(eV)' %
               OE_PROPERTY_BASE)
OE_HOLE_EP = 'r_%s_Hole_Extraction_Potential_(eV)' % OE_PROPERTY_BASE
OE_HOLE_VIE = 'r_%s_Hole_Vertical_Ionization_Energy_(eV)' % OE_PROPERTY_BASE
OE_HOLE_ADIABATIC = ('r_%s_Hole_Adiabatic_Ionization_Energy_(ev)' %
                     OE_PROPERTY_BASE)
OE_HOLE_NEUT_STABLE = ('r_%s_Hole_Neutral_Stabilization_Energy_(ev)' %
                       OE_PROPERTY_BASE)
OE_ELECTRON_REORG = ('r_%s_Electron_Reorganization_Energy_(eV)' %
                     OE_PROPERTY_BASE)
OE_ELECTRON_SPE = ('r_%s_Electron_Small_Polaron_Stabilization_Energy_(eV)' %
                   OE_PROPERTY_BASE)
OE_ELECTRON_EP = 'r_%s_Electron_Extraction_Potential_(eV)' % OE_PROPERTY_BASE
OE_ELECTRON_VIE = ('r_%s_Electron_Vertical_Ionization_Energy_(eV)' %
                   OE_PROPERTY_BASE)
OE_ELECTRON_ADIABATIC = ('r_%s_Electron_Adiabatic_Ionization_Energy_(ev)' %
                         OE_PROPERTY_BASE)
OE_ELECTRON_NEUT_STABLE = ('r_%s_Electron_Neutral_Stabilization_Energy_(ev)' %
                           OE_PROPERTY_BASE)
OE_TRIPLET_REORG = 'r_%s_Triplet_Reorganization_Energy_(eV)' % OE_PROPERTY_BASE
OE_TRIPLET_SPE = 'r_%s_Triplet_Stabilization_Energy_(eV)' % OE_PROPERTY_BASE
OE_TRIPLET_EP = 'r_%s_Triplet_Extraction_Potential_(eV)' % OE_PROPERTY_BASE
OE_TRIPLET_ENERGY = 'r_%s_Triplet_Energy_(eV)' % OE_PROPERTY_BASE
OE_ABSORPTION_WINDOW = 'r_%s_Absorption_Window' % OE_PROPERTY_BASE
OE_BANDGAP = 'r_%s_Optical_Bandgap_(eV)' % OE_PROPERTY_BASE
OE_SPECTRUM_FILE = 's_%s_Spectrum_File' % OE_PROPERTY_BASE
OE_LMAX = 'i_%s_Lmax_(nm)' % OE_PROPERTY_BASE
OE_BLUE_AREA = 'r_%s_Blue_Area' % OE_PROPERTY_BASE
OE_GREEN_AREA = 'r_%s_Green_Area' % OE_PROPERTY_BASE
OE_RED_AREA = 'r_%s_Red_Area' % OE_PROPERTY_BASE
OE_DIPOLE = 'r_%s_Dipole_(D)' % OE_PROPERTY_BASE
OE_SCALED_HOMO = 'r_%s_Scaled_HOMO_(eV)' % OE_PROPERTY_BASE
OE_SCALED_LUMO = 'r_%s_Scaled_LUMO_(eV)' % OE_PROPERTY_BASE
OE_SCALED_GAP = 'r_%s_Scaled_Gap_(eV)' % OE_PROPERTY_BASE
OE_TADF_GAP = 'r_%s_S1-T1_Gap_(eV)' % OE_PROPERTY_BASE
OE_TADF_GAP2 = 'r_%s_S1-T2_Gap_(eV)' % OE_PROPERTY_BASE
OE_TADF_GAP3 = 'r_%s_S1-T3_Gap_(eV)' % OE_PROPERTY_BASE
OE_T1S0_RMSD = 'r_%s_T1S0_RMSD_(Angstrom)' % OE_PROPERTY_BASE
OE_EMAX = 'i_%s_Emax_(nm)' % OE_PROPERTY_BASE
OE_EMS_BLUE_AREA = 'r_%s_Emission_Blue_Area' % OE_PROPERTY_BASE
OE_EMS_GREEN_AREA = 'r_%s_Emission_Green_Area' % OE_PROPERTY_BASE
OE_EMS_RED_AREA = 'r_%s_Emission_Red_Area' % OE_PROPERTY_BASE
OE_S1_AT_S0 = 'r_%s_S1_at_S0_(eV)' % OE_PROPERTY_BASE
OE_S2_AT_S0 = 'r_%s_S2_at_S0_(eV)' % OE_PROPERTY_BASE
OE_S3_AT_S0 = 'r_%s_S3_at_S0_(eV)' % OE_PROPERTY_BASE
OE_S1_AT_S0_TD = 'r_%s_S1_at_S0_Transition_Dipole_(D)' % OE_PROPERTY_BASE
OE_S2_AT_S0_TD = 'r_%s_S2_at_S0_Transition_Dipole_(D)' % OE_PROPERTY_BASE
OE_S3_AT_S0_TD = 'r_%s_S3_at_S0_Transition_Dipole_(D)' % OE_PROPERTY_BASE
OE_STOKES_SHIFT = 'r_%s_Stokes_Shift' % OE_PROPERTY_BASE
OE_TRIPLET_VERT_UP = 'r_%s_T1_Vertical_Absorption_(eV)' % OE_PROPERTY_BASE
OE_TRIPLET_VERT_DOWN = 'r_%s_T1_Vertical_Emission_(eV)' % OE_PROPERTY_BASE
OE_RAW_TRIPLET = 'r_%s_T1_Raw_Triplet_Energy_(eV)' % OE_PROPERTY_BASE

# Marcus properties
MARCUS_HOLE_HOPPING_RATE = 'r_%s_Hole_Hopping_Rate' % MATSCI_PROPERTY_BASE
MARCUS_HOLE_MOBILITY = 'r_%s_Hole_Mobility' % MATSCI_PROPERTY_BASE
MARCUS_ELECTRON_HOPPING_RATE = ('r_%s_Electron_Hopping_Rate' %
                                MATSCI_PROPERTY_BASE)
MARCUS_ELECTRON_MOBILITY = 'r_%s_Electron_Mobility' % MATSCI_PROPERTY_BASE
MARCUS_DIMER_SEPARATION = 'r_%s_Dimer_Separation_cm' % MATSCI_PROPERTY_BASE
HOPPING_REACTION_ENERGY = 'r_%s_Reaction_Energy_kcal/mol' % MATSCI_PROPERTY_BASE
COUPLING_TYPE = 's_%s_Coupling_Type' % MATSCI_PROPERTY_BASE
MARCUS_HOLE_REORG_ENERGY = ('r_%s_Hole_Reorganization_Energy_eV' %
                            MATSCI_PROPERTY_BASE)
MARCUS_ELECTRON_REORG_ENERGY = ('r_%s_Electron_Reorganization_Energy_eV' %
                                MATSCI_PROPERTY_BASE)
MARCUS_SOURCE_STRUCTURE_PROP = 'i_matsci_source_structure_index'
MARCUS_SOURCE_MOLECULE1_PROP = 'i_matsci_source_molecule1'
MARCUS_SOURCE_MOLECULE2_PROP = 'i_matsci_source_molecule2'
MARCUS_CHARGE_HOPPING_RATE = 'r_%s_Charge_Hopping_Rate' % MATSCI_PROPERTY_BASE
MARCUS_CHARGE_MOBILITY = 'r_%s_Charge_Mobility' % MATSCI_PROPERTY_BASE
MARCUS_CHARGE_REORG_ENERGY = ('r_%s_Charge_Reorganization_Energy_eV' %
                              MATSCI_PROPERTY_BASE)

# These property names are hard-coded in Jaguar
ELECTRON_TRANSFER_COUPLING = 'r_matsci_Charge_Transfer_Coupling'
COUPLING_SIF = r'r_matsci_S\_if'
COUPLING_HIF = r'r_matsci_H\_if'
COUPLING_HII = r'r_matsci_H\_ii'

# The string 'type' is replaced before use with the carrier type
DIMER_SPLITTING_ECOUPLING = 'r_matsci_Dimer_Splitting_type_Coupling'

# Bond Dissociation Energy properties
BDE_REACTANT_TITLE = 's_matsci_BDE_Reactant'
BDE_PRODUCT_TITLES = ['s_matsci_BDE_Product_A', 's_matsci_BDE_Product_B']
DISSOCIATION_ATOM = 'b_matsci_Dissociation_Atom'
BDE_ENERGY = 'r_matsci_Bond_Dissociation_Energy_(kcal/mol)'
BDE_INTERNAL_ENERGY = 'r_matsci_Bond_Dissociation_Internal_Energy_(kcal/mol)'
BDE_ENTHALPY = 'r_matsci_Bond_Dissociation_Enthalpy_(kcal/mol)'
BDE_FREE_ENERGY = 'r_matsci_Bond_Dissociation_Free_Energy_(kcal/mol)'
BDE_BOND_LABEL = 's_matsci_BDE_Label'
WEAKEST_BDE_PROP = 'r_matsci_Weakest_BDE_(kcal/mol)'
WEAKEST_INTERNAL_ENERGY_BDE_PROP = ('r_matsci_Weakest_Internal_Energy_BDE_'
                                    '(kcal/mol)')
WEAKEST_ENTHALPY_BDE_PROP = 'r_matsci_Weakest_Enthalpy_BDE_(kcal/mol)'
WEAKEST_FREE_ENERGY_BDE_PROP = 'r_matsci_Weakest_Free_Energy_BDE_(kcal/mol)'
BDE_ENERGY_TO_WEAKEST_PROP = {
    BDE_ENERGY: WEAKEST_BDE_PROP,
    BDE_INTERNAL_ENERGY: WEAKEST_INTERNAL_ENERGY_BDE_PROP,
    BDE_ENTHALPY: WEAKEST_ENTHALPY_BDE_PROP,
    BDE_FREE_ENERGY: WEAKEST_FREE_ENERGY_BDE_PROP
}

# Crystal/PBC related properties
UNIT_CELL_FORMULA_KEY = 's_m_Unit_Cell_Formula'
UNIT_CELL_VOLUME_KEY = 'r_m_Unit_Cell_Volume/Ang.^3'
UNIT_CELL_DENSITY_KEY = 'r_m_Unit_Cell_Density/g/cm^3'
# PDB properties
PDB_BOX_PROPS = (mm.M2IO_PDB_CRYSTAL_A, mm.M2IO_PDB_CRYSTAL_B,
                 mm.M2IO_PDB_CRYSTAL_C, mm.M2IO_PDB_CRYSTAL_ALPHA,
                 mm.M2IO_PDB_CRYSTAL_BETA, mm.M2IO_PDB_CRYSTAL_GAMMA)
PBC_POSITION_KEY = 's_mae_pbc_position'
SPACE_GROUP_ID_KEY = 'i_matsci_Space_Group_ID'

# Beta elimination properties
BETA_ELIM_DELTA = 'r_matsci_Beta_Elimination_Energy_(kcal/mol)'
BETA_ELIM_REACTION = 's_matsci_Beta_Elimination_Reaction'
BETA_ELIM_INDEX = 's_matsci_Beta_Elimination_Index'


[docs]def kcal_prop_to_ev_prop(prop): """ Convert a property name that is in kcal/mol to one that is in eV :param str prop: The property name :rtype: str :return: The property name with kcal/mol replaced by eV """ return prop.replace('kcal/mol', 'eV')
# Stress Strain properties STRESS_AT_VM_STRAIN_STR = 'r_matsci_Stress_@VM_Strain_' STRESS_AT_VM_STRAIN = STRESS_AT_VM_STRAIN_STR + '%.4f' STRAIN_RATE = 'r_matsci_Strain_Rate_(10^8_1/s)' STRESS_MAIN_DIR = 'r_matsci_Strain_in_%s_Direction_%.4f' # Quantum ESPRESSO related properties ENERGY_AT_ECUT_KPT = 'r_matsci_Energy_@EnCut_NKpts_%.3f_%d_%s' QE_ECUTWFC = 'r_matsci_Ecutwfc_(Ry)' QE_ECUTRHO = 'r_matsci_Ecutrho_(Ry)' QE_ETOT = 'r_matsci_Etot_(Ry)' QE_MTOT = 'r_matsci_Total_Magnetization' QE_EFERMI = 'r_matsci_EFermi_(Ry)' QE_MD_NSTEP = 'i_matsci_qemd_nstep' QE_MD_CURTIME = 'r_matsci_qemd_curtime_(ps)' QE_DFT_FUNCT_STR = 's_matsci_DFT_Functional_String' QE_DFT_VDW_CORR = 's_matsci_DFT_vdW_Correction' QE_NKS = 'i_matsci_NKpoints' QE_NBND = 'i_matsci_NBands' QE_NBND_DW = 'i_matsci_NBands_Down' QE_SAVE_FN = 's_matsci_QE_Save_File' QE_STARTING_MAG = 's_matsci_Initial_Magnetization' QE_STARTING_MAG_ML = 'Initial Magnetization' QE_CART_ATOM_CONSTR = 's_matsci_Cartesian_Atomic_Constraint' QE_TORS_ATOM_CONSTR = 's_matsci_Torsion_Atomic_Constraint' QE_SPECTRUM_FILE = 's_matsci_QE_Spectrum_File' QE_NEB_EN = 'r_matsci_NEB_Energy_(eV)' QE_NEB_FORWARD_EN = 'r_matsci_NEB_Forward_Activation_Energy_(eV)' QE_NEB_BACKWARD_EN = 'r_matsci_NEB_Backward_Activation_Energy_(eV)' QE_NEB_REACT_EN = 'r_matsci_NEB_Reaction_Energy_(eV)' QE_FTOT = 'r_matsci_Total_Force_(Ry/au)' QE_SCF_CORR = 'r_matsci_SCF_Correction_(Ry)' QE_PRESS = 'r_matsci_Pressure_(kbar)' QE_LOWDIN_TCHARGE = 'r_matsci_Lowdin_charge' QE_LOWDIN_UP = 'r_matsci_Lowdin_spin_up' QE_LOWDIN_DW = 'r_matsci_Lowdin_spin_down' QE_LOWDIN_SPILL = 'r_matsci_Lowdin_spilling' QE_BAND_GAP = 'r_matsci_QE_Band_gap_(eV)' QE_IS_METAL = 'b_matsci_QE_Is_Metal' QE_IS_DIRECT_BAND_GAP = 'b_matsci_QE_Is_Direct_Band_Gap' QE_ETOT_THR = 'r_matsci_QE_Etot_Convergence_Threshold' QE_F_THR = 'r_matsci_QE_Force_Convergence_Threshold' QE_P_THR = 'r_matsci_QE_Pressure_Convergence_Threshold' QE_ETOT_ERR = 'r_matsci_QE_Etot_Error' QE_F_ERR = 'r_matsci_QE_Force_Error' QE_P_ERR = 'r_matsci_QE_Pressure_Error' QE_TIMING_CPU = 'r_matsci_QE_Total_Time_CPU_(s)' QE_TIMING_WALL = 'r_matsci_QE_Total_Time_Wall_(s)' QE_IS_SPIN_POLARIZED = 'b_matsci_QE_Is_Spin_Polarized' QE_MP_MESH = 's_matsci_QE_K_Point_Mesh' QE_HAS_HUBBARD = 'b_matsci_QE_Hubbard_Enabled' QE_STRESS_COMP = 'r_matsci_QE_Stress_%s_(kbar)' QE_STRESS_COMPS = (('XX', 'XY', 'XZ'), ('YX', 'YY', 'YZ'), ('ZX', 'ZY', 'ZZ')) QE_ATOM_FORCE_COMP = 'r_matsci_QE_Force_%s_(Ry/au)' QE_ATOM_FORCE_COMPS = ('X', 'Y', 'Z') # Jaguar related properties JAGUAR_OUTPATH_PROP = 's_j_Jaguar_output_file' JAGUAR_LOG_PATH_PROP = 's_j_Jaguar_log_file' CHARGE_PROP = 'i_m_Molecular_charge' MULTIPLICITY_PROP = 'i_m_Spin_multiplicity' # Tg properties TG_DENSITY_LEAD = 'r_matsci_Density(g/cm3)_@_' TG_DENSITY = TG_DENSITY_LEAD + '{0}_K' TG_DENSITY_STDEV_LEAD = 'r_matsci_stdev_Density(g/cm3)_@_' TG_DENSITY_STDEV = TG_DENSITY_STDEV_LEAD + '{0}_K' TG_PROP = 'r_matsci_Tg_K' TM_PROP = 'r_matsci_Tm_K' # Elastic properties EL_Y_MOD = "r_matsci_Young's_Modulus_(MPa)" EL_UNI_ANI = 'r_matsci_Universal_Anisotropy' EL_P_RATIO = 'r_matsci_Poisson_Ratio' EL_LAMBDA = "r_matsci_Lame'_Lambda_(MPa)" EL_MU = "r_matsci_Lame'_Mu" EL_SHEAR = 'r_matsci_Shear_Modulus_(MPa)' EL_BULK = 'r_matsci_Bulk_Modulus_(MPa)' EL_BULK_V = 'r_matsci_Bulk_Modulus_Voigt_(MPa)' EL_BULK_R = 'r_matsci_Bulk_Modulus_Reuss_(MPa)' EL_SHEAR_V = 'r_matsci_Shear_Modulus_Voigt_(MPa)' EL_SHEAR_R = 'r_matsci_Shear_Modulus_Reuss_(MPa)' # TODO: Remove this property from MMSHARE (playertoolbar.py) PERIODIC_FIX = 'b_m_periodic_fix' # Polymer builder properties MONOMER_NAME_PROP = 's_matsci_polymer_monomer_name' MONOMER_ORIG_ATOM_IDX_PROP = 'i_matsci_polymer_monomer_orig_atom_idx' BACKBONE_ATOM_PROP = 'b_matsci_polymer_backbone_atom' BACKBONE_ADJOINING_ATOM_PROP = 'b_matsci_polymer_backbone_adjoining_atom' SIDE_GROUP_ATOM_PROP = 's_matsci_polymer_sidegroup_atom' CHIRAL_R_MONOMER_PROP = 'b_matsci_polymer_monomer_chiral_r' CHIRAL_S_MONOMER_PROP = 'b_matsci_polymer_monomer_chiral_s' CHIRAL_R = 'R' CHIRAL_S = 'S' MONOMER_NUMBER = 'i_matsci_monomer_number' HEAD_ATOM_PROP = 'b_matsci_polymer_head_atom' TAIL_ATOM_PROP = 'b_matsci_polymer_tail_atom' SEQUENCE_PROP = 's_matsci_polymer_sequence' # SemiCrystal Builder ACTIVE_CRYSTAL_ATOM = 'b_matsci_active_crystal_atom' CRYSTAL_ATOM = 'b_matsci_crystal_atom' CRYSTAL_CORD_X = 'r_matsci_crystal_cord_x' CRYSTAL_CORD_Y = 'r_matsci_crystal_cord_y' CRYSTAL_CORD_Z = 'r_matsci_crystal_cord_z' # Mark monomer head tail properties ROLE_PROP = mm.M2IO_DATA_ATOM_POLYMER_ROLE HEAD = mm.M2IO_DATA_ATOM_POLYMER_ROLE_HEAD TAIL = mm.M2IO_DATA_ATOM_POLYMER_ROLE_TAIL DUAL = mm.M2IO_DATA_ATOM_POLYMER_ROLE_DUAL HEAD_CAPPER = mm.M2IO_DATA_ATOM_POLYMER_ROLE_HEAD_CAP TAIL_CAPPER = mm.M2IO_DATA_ATOM_POLYMER_ROLE_TAIL_CAP CAPPER_EXT = HEAD_CAPPER[len(HEAD):] # Pentrant Loading NUM_PENETRANTS_PROP = 'i_matsci_Molecules_Added' # Polymer Crosslink XLINK_SATURATION = 'r_matsci_Xlink_Saturation_%' XLINKABLE_TYPE_PROP = 'i_matsci_Xlinkable_Type' XLINKED_ON_STEP_PROP = 'i_matsci_Xlinked_On_Step' # Polymer Descriptors POLY_FINGERPRINT_PROP_BASE = 'r_matsci_Polymer_Fingerprint' # MaterialsProject MP_URL = 's_matsci_MP_URL' MP_MAGNETIC_TYPE = 's_matsci_MP_Magnetic_Type' # Elastic constants CSV file name ELASTIC_CSV_PROP = 's_matsci_Elastic_CSV' # EOS CSV file name QE_EOS_CSV = 's_matsci_EOS_CSV' # Adsorbates SUB_REACTIVE_INDEX_PROP = 'i_matsci_Substrate_Reactive_Atom_Index' ADS_REACTIVE_INDEX_PROP = 'i_matsci_Adsorbate_Reactive_Atom_Index' ADS_FRAGMENT_FREE_ENERGY_PROP = 'r_matsci_Free_Energy_(Hartree)' ADS_FRAGMENT_ENTROPY_STARTER = 'r_matsci_-TdS' ADS_FRAGMENT_ENTROPY_PROP = (ADS_FRAGMENT_ENTROPY_STARTER + '_{temp:.2f}K_{pressure:.2E}atm_(kcal/mol)') ADS_PRESSURE_CORRECTION_START = 'r_matsci_RTln(p0/p)' ADS_PRESSURE_CORRECTION_PROP = (ADS_PRESSURE_CORRECTION_START + '_{temp:.2f}K_{pressure:.2E}atm_(kcal/mol)') ADSORPTION_RXN_ENERGY_PROP = 'r_matsci_Adsorption_Energy_(kcal/mol)' ADSORPTION_RXN_FREE_ENERGY_STARTER = 'r_matsci_Adsorption_Free_Energy_' ADSORPTION_RXN_FREE_ENERGY_PROP = (f'{ADSORPTION_RXN_FREE_ENERGY_STARTER}' '{temp:.2f}K_{pressure:.2E}atm_' '{s_loss:d}%dS_(kcal/mol)') ADS_GAS_MOLECULE_PROP = 's_matsci_Gas_Molecule' ADS_SUBSTRATE_PROP = 's_matsci_Substrate' PROPERTY_FILE_PROP = 's_matsci_Property_File' PROPERTY_FILE_ID_PROP = 's_matsci_Property_File_ID' FRAGMENT_TYPE_PROP = 's_matsci_Fragment_Type' # MSMD Trajectory analysis props DENSITY_PROP = 'r_matsci_Density_(g/cm^3)' VOLUME_PROP = 'r_matsci_Volume_(A^3)' COHESIVE_PROP = 'r_matsci_Cohesive_Energy_(kcal/mol)' HEAT_VAP_PROP = 'r_matsci_Heat_of_Vaporization_(kcal/mol)' SOLUBILITY_PROP = 'r_matsci_Solubility_Parameter_(MPa^(1/2))' SOLUBILITY_VDW_PROP = 'r_matsci_Solubility_Parameter_(vDW)_(MPa^(1/2))' SOLUBILITY_ELE_PROP = ('r_matsci_Solubility_Parameter_' '(Electrostatics)_(MPa^(1/2))') SPECIFIC_HEAT_PROP = ('r_matsci_Specific_Heat_(J/gK)') # PDB Props PDB_ATOM_NAME_KEY = 's_m_pdb_atom_name' # Powder diffraction pattern PDP_SPECTRUM_FILE = 's_matsci_Powder_Diffraction_Pattern_File' LATTICE_PARAMS = ('a', 'b', 'c', 'alpha', 'beta', 'gamma') # Surfaces SURFACE_ATOM_PROP = 'b_matsci_surface_atom' # This might get overwritten by hierarchy functionality (MATSCI-12220) # Please don't use directly, use msutils.get/set_dimensionality_from_st DIMENSIONALITY_PROP = 'i_matsci_dimensionality' # complex descriptors MOPAC_HOMO_LUMO_GAP = 'r_matsci_mopac_homo_lumo_gap_eV' # Barrier properties BARRIER_BASE_INFO_PROP = 's_matsci_barrier_info' BARRIER_ASL_PROP = 's_matsci_barrier_asl' BARRIER_TYPE_PROP = 's_matsci_barrier_type' BARRIER_INFO_PROP = BARRIER_BASE_INFO_PROP + '_%d' # FFIO velocity for desmond. Using method so that axis is not forgotten
[docs]def FFIO_ATOM_VEL(x): assert x in ['x', 'y', 'z'] return 'r_ffio_%s_vel' % x
[docs]def get_tg_props(temp): """ Get the Tg property names for the given temperature :type temp: float :param temp: The temperature for these property names :rtype: (str, str) :param: The density and standard deviation property names at the given temp """ return TG_DENSITY.format(temp), TG_DENSITY_STDEV.format(temp)
[docs]class PropertyNameError(Exception): """ Raised for invalid property names """ pass
[docs]def get_user_name(prop): """ Returns the user-facing name of an m2io property :param str prop: An m2io property name such as r_m_property_name :rtype: str :return: User-facing property name :raise PropertyNameError: Exception for invalid m2io property names """ try: property_namer = structure.PropertyName(dataname=prop) except Exception as err: # Note that the PropertyName class raises bare exceptions for things # that go wrong raise PropertyNameError(str(err)) return property_namer.userName()
[docs]def is_valid_property_name(prop): """ Return whether prop is a valid Maestro property name :param str prop: The property name to check :rtype: bool :return: Whether the property name is valid """ try: get_user_name(prop) except PropertyNameError: return False return True