コード例 #1
0
ファイル: statmech.py プロジェクト: PWstmrlnd/RMG-Py
 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(),
     )
コード例 #2
0
    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(),
        )
コード例 #3
0
    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(),
        )
コード例 #4
0
ファイル: thermo.py プロジェクト: calebclass/RMG-Py
 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(),
     )
コード例 #5
0
ファイル: solvation.py プロジェクト: pw0908/RMG-Py
    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(),
        )
コード例 #6
0
 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
コード例 #7
0
    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
コード例 #8
0
 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(),
     )
コード例 #9
0
ファイル: statmech.py プロジェクト: zach-youssef/RMG-Py
 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(),
     )