def loadEntry( self, index, label, group, statmech, reference=None, referenceType='', shortDesc='', longDesc='', ): if (group[0:3].upper() == 'OR{' or group[0:4].upper() == 'AND{' or group[0:7].upper() == 'NOT OR{' or group[0:8].upper() == 'NOT AND{'): item = makeLogicNode(group) else: item = Group().fromAdjacencyList(group) self.entries[label] = Entry( index=index, label=label, item=item, data=statmech, reference=reference, referenceType=referenceType, shortDesc=shortDesc, longDesc=longDesc.strip(), )
def loadEntry( self, index, label, molecule, solute, reference=None, referenceType='', shortDesc='', longDesc='', ): try: spc = Species().fromSMILES(molecule) except: logging.debug( "Solute '{0}' does not have a valid SMILES '{1}'".format( label, molecule)) try: spc = Species().fromAdjacencyList(molecule) except: logging.error( "Can't understand '{0}' in solute library '{1}'".format( molecule, self.name)) raise self.entries[label] = Entry( index=index, label=label, item=spc, data=solute, reference=reference, referenceType=referenceType, shortDesc=shortDesc, longDesc=longDesc.strip(), )
def loadEntry(self, index, label, molecule, solute, reference=None, referenceType='', shortDesc='', longDesc='', ): try: mol = Molecule(SMILES=molecule) except: try: mol = Molecule().fromAdjacencyList(molecule) except: logging.error("Can't understand '{0}' in solute library '{1}'".format(molecule,self.name)) raise self.entries[label] = Entry( index = index, label = label, item = mol, data = solute, reference = reference, referenceType = referenceType, shortDesc = shortDesc, longDesc = longDesc.strip(), )
def loadEntry(self, index, label, molecule, thermo, reference=None, referenceType='', shortDesc='', longDesc='', ): molecule = Molecule().fromAdjacencyList(molecule) # Internal checks for adding entry to the thermo library if label in self.entries.keys(): raise DatabaseError('Found a duplicate molecule with label {0} in the thermo library. Please correct your library.'.format(label)) for entry in self.entries.values(): if molecule.isIsomorphic(entry.item): if molecule.multiplicity == entry.item.multiplicity: raise DatabaseError('Adjacency list and multiplicity of {0} matches that of existing molecule {1} in thermo library. Please correct your library.'.format(label, entry.label)) self.entries[label] = Entry( index = index, label = label, item = molecule, data = thermo, reference = reference, referenceType = referenceType, shortDesc = shortDesc, longDesc = longDesc.strip(), )
def loadEntry( self, index, label, solvent, molecule=None, reference=None, referenceType='', shortDesc='', longDesc='', ): if molecule is not None: if not isinstance(molecule, list): molecule = [molecule] spc_list = [] for mol in molecule: spc0 = Species(label=label) spc0.set_structure(mol) spc_list.append(spc0) else: spc_list = None self.entries[label] = Entry( index=index, label=label, item=spc_list, data=solvent, reference=reference, referenceType=referenceType, shortDesc=shortDesc, longDesc=longDesc.strip(), )
def loadEntry(self, index, label, molecule, thermo, reference=None, referenceType='', shortDesc='', longDesc=''): entry = Entry( index = index, label = label, item = Molecule().fromAdjacencyList(molecule), data = thermo, reference = reference, referenceType = referenceType, shortDesc = shortDesc, longDesc = longDesc.strip(), ) self.entries[label] = entry return entry
def getFrequencyGroups(self, molecule): """ Return the set of characteristic group frequencies corresponding to the speficied `molecule`. This is done by searching the molecule for certain functional groups for which characteristic frequencies are known, and using those frequencies. """ frequencies = [] groupCount = {} # This is an additional hardcoded functional group for C-H with C in a ring # It is hardcoded because the adjacency list format isn't well-equipped # to handle this sort of functional group ringCH = Entry( label='ringCH', item=None, data=GroupFrequencies([(2750., 3150., 1), (900., 1100., 1)]), ) # Generate estimate of thermodynamics for atom in molecule.atoms: # Iterate over heavy (non-hydrogen) atoms if atom.isHydrogen(): continue if molecule.isAtomInCycle(atom): # Atom is in cycle # Add each C-H bond to the ringCH group # This is hardcoding of functional groups! if atom.isCarbon(): for atom2 in atom.edges: if atom2.isHydrogen(): try: groupCount[ringCH] += 1 except KeyError: groupCount[ringCH] = 1 else: # Atom is not in cycle, so find a group for it node = self.__getNode(molecule, {'*': atom}) if node is not None: try: groupCount[node] += 1 except KeyError: groupCount[node] = 1 return groupCount
def loadEntry(self, index, label, solvent, reference=None, referenceType='', shortDesc='', longDesc='', ): self.entries[label] = Entry( index = index, label = label, data = solvent, reference = reference, referenceType = referenceType, shortDesc = shortDesc, longDesc = longDesc.strip(), )
def loadEntry(self, index, label, molecule, statmech, reference=None, referenceType='', shortDesc='', longDesc='', ): self.entries[label] = Entry( index = index, label = label, item = Molecule().fromAdjacencyList(molecule), data = statmech, reference = reference, referenceType = referenceType, shortDesc = shortDesc, longDesc = longDesc.strip(), )