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_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_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'
# 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')
# Evaporation
EVAP_PERCENT = 'r_matsci_Evap_%_Removed'
EVAP_ITER_NUM = 'i_matsci_Evap_Iteration_Number'
# 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