Exemple #1
0
    def loadKinetics(self,
                     path,
                     reactionLibraries=None,
                     seedMechanisms=None,
                     kineticsFamilies=None,
                     kineticsDepositories=None):
        """
        Load the RMG kinetics database from the given `path` on disk, where
        `path` points to the top-level folder of the RMG kinetics database.
        """
        kineticsLibraries = []
        libraryOrder = []
        if seedMechanisms is None and reactionLibraries is None:
            kineticsLibraries = None
        if seedMechanisms is not None:
            for library in seedMechanisms:
                kineticsLibraries.append(library)
                libraryOrder.append((library, 'Seed'))
        if reactionLibraries is not None:
            for library in reactionLibraries:
                kineticsLibraries.append(library)
                libraryOrder.append((library, 'Reaction Library'))

        self.kinetics = KineticsDatabase()
        self.kinetics.libraryOrder = libraryOrder
        self.kinetics.load(path,
                           families=kineticsFamilies,
                           libraries=kineticsLibraries,
                           depositories=kineticsDepositories)

        broadcast(self.kinetics, 'kinetics')
Exemple #2
0
    def setUpClass(cls):
        """A function run ONCE before all unit tests in this class."""
        # Set up a dummy database
        cls.database = RMGDatabase()
        cls.database.load(
            path=os.path.join(settings['test_data.directory'],
                              'testing_database'),
            thermoLibraries=[],
            reactionLibraries=[],
            kineticsFamilies=[],
            depository=False,
            solvation=False,
            testing=True,
        )
        cls.database.loadForbiddenStructures()

        cls.thermoDatabase = ThermoDatabase()  #the real full Thermo Database
        cls.thermoDatabase.load(path=os.path.join(
            settings['database.directory'], 'thermo'),
                                libraries=['primaryThermoLibrary'])

        cls.kineticsDatabase = KineticsDatabase()
        cls.kineticsDatabase.loadFamilies(
            path=os.path.join(settings['test_data.directory'],
                              'testing_database/kinetics/families'),
            families=[
                'Singlet_Carbene_Intra_Disproportionation',
            ],
        )
        cls.family = cls.kineticsDatabase.families[
            'Singlet_Carbene_Intra_Disproportionation']
Exemple #3
0
    def setUpClass(cls):
        """A function run ONCE before all unit tests in this class."""
        # Set up a dummy database
        cls.database = RMGDatabase()
        cls.database.load(
            path=os.path.join(settings['test_data.directory'], 'testing_database'),
            thermo_libraries=[],
            reaction_libraries=[],
            kinetics_families=[],
            depository=False,
            solvation=False,
            testing=True,
        )
        cls.database.load_forbidden_structures()

        cls.thermoDatabase = ThermoDatabase()  # the real full Thermo Database
        cls.thermoDatabase.load(path=os.path.join(settings['database.directory'], 'thermo'),
                                libraries=['primaryThermoLibrary'])

        cls.kineticsDatabase = KineticsDatabase()
        cls.kineticsDatabase.load_families(
            path=os.path.join(settings['test_data.directory'], 'testing_database/kinetics/families'),
            families=[
                'Singlet_Carbene_Intra_Disproportionation',
            ],
        )
        cls.family = cls.kineticsDatabase.families['Singlet_Carbene_Intra_Disproportionation']
        cls.treerxns = cls.family.get_training_set(thermo_database=cls.thermoDatabase, remove_degeneracy=True,
                                                   estimate_thermo=True, fix_labels=True, get_reverse=True)
Exemple #4
0
 def setUpClass(cls):
     """
     A function run ONCE before all unit tests in this class.
     """
     # Set up a dummy database
     cls.database = KineticsDatabase()
     cls.database.loadLibraries(os.path.join(settings['test_data.directory'], 'testing_database','kinetics','libraries'),
                               libraries=None) #this loads all of them: ['GRI-Mech3.0', 'ethane-oxidation'])
     cls.libraries = cls.database.libraries
Exemple #5
0
 def setUp(self):
     """
     A function run before each unit test in this class.
     """
     # Set up a dummy database
     dir_path = os.path.dirname(os.path.realpath(__file__))
     self.database = KineticsDatabase()
     self.database.loadFamilies(os.path.join(dir_path, "family_test_data"),
                                families=['intra_H_migration'])
     self.family = self.database.families['intra_H_migration']
Exemple #6
0
 def setUp(self):
     """
     A function run before each unit test in this class.
     """
     # Set up a dummy database
     self.database = KineticsDatabase()
     self.database.loadFamilies(os.path.join(
         settings['test_data.directory'],
         'testing_database/kinetics/families'),
                                families=['intra_H_migration'])
     self.family = self.database.families['intra_H_migration']
Exemple #7
0
 def setUpClass(cls):
     """
     A function run ONCE before all unit tests in this class.
     """
     # Set up a dummy database
     cls.database = KineticsDatabase()
     cls.database.loadFamilies(
         os.path.join(settings['test_data.directory'],
                      'testing_database/kinetics/families'),
         families=['intra_H_migration', 'R_Addition_MultipleBond'])
     cls.family = cls.database.families['intra_H_migration']
Exemple #8
0
    def test_load_families_correct(self):
        """Test valid methods for loading kinetics families."""
        path = os.path.join(settings['test_data.directory'],
                            'testing_database', 'kinetics', 'families')
        database = KineticsDatabase()
        database.loadRecommendedFamiliesList(
            os.path.join(path, 'recommended.py'))

        try:
            database.loadFamilies(path, families=[])
        except DatabaseError:
            self.fail("Unable to load families using list []")

        try:
            database.loadFamilies(path, families='none')
        except DatabaseError:
            self.fail("Unable to load families using keyword 'none'")

        try:
            database.loadFamilies(path, families='default')
        except DatabaseError:
            self.fail("Unable to load families using keyword 'default'")

        try:
            database.loadFamilies(path, families=['default', 'pah'])
        except DatabaseError:
            self.fail("Unable to load families using list ['default', 'pah']")

        try:
            database.loadFamilies(path, families=['R_Addition_MultipleBond'])
        except DatabaseError:
            self.fail(
                "Unable to load families using list ['R_Addition_MultipleBond']"
            )

        try:
            database.loadFamilies(
                path, families=['!H_Abstraction', '!Disproportionation'])
        except DatabaseError:
            self.fail(
                "Unable to load families using list ['!H_Abstraction', '!Disproportionation']"
            )

        try:
            database.loadFamilies(path, families='!pah')
        except DatabaseError:
            self.fail("Unable to load families using keyword '!pah'")

        try:
            database.loadFamilies(path, families=['H_Abstraction', 'pah'])
        except DatabaseError:
            self.fail(
                "Unable to load families using list ['H_Abstraction', 'pah']")
Exemple #9
0
    def test_load_families_incorrect(self):
        """Test invalid methods for loading kinetics families"""
        path = os.path.join(settings['test_data.directory'], 'testing_database', 'kinetics', 'families')
        database = KineticsDatabase()
        database.loadRecommendedFamiliesList(os.path.join(path, 'recommended.py'))

        with self.assertRaises(DatabaseError):
            database.loadFamilies(path, families='random')
        with self.assertRaises(DatabaseError):
            database.loadFamilies(path, families=['!H_Abstraction','Disproportionation'])
        with self.assertRaises(DatabaseError):
            database.loadFamilies(path, families=['fake_family'])
Exemple #10
0
def read_kinetic_lib_from_path(lib_path,
                               kinetic_db,
                               overwrite=False,
                               create=False):
    """
    Read RMG kinetic library given its file path. The species dictionary should
    be included under the same directory.

    Args:
        lib_path (str): Path to thermo library file
        kinetic_db (RMG KineticsDatabase): RMG  database object
    """
    if not os.path.exists(lib_path) and create:
        create_kinetic_lib(os.path.dirname(lib_path))
        lib = KineticsLibrary()
        kinetic_db.libraries[lib_path] = lib
        kinetic_db.library_order.append(lib_path)
        logging.info(
            'Created kinetics library {1} at {0} ...'.format(
                os.path.split(lib_path)[0],
                os.path.split(lib_path)[1]), )
    elif lib_path not in kinetic_db.library_order or overwrite:
        lib = KineticsLibrary()
        try:
            lib.load(lib_path,
                     KineticsDatabase().local_context,
                     KineticsDatabase().global_context)
        except:
            logging.error('The library file %s is not vaild.' % (lib_path))
        else:
            lib.label = lib_path
            kinetic_db.libraries[lib.label] = lib
            kinetic_db.library_order.append(lib.label)
            logging.info(
                'Loading kinetics library {1} from {0} ...'.format(
                    os.path.split(lib_path)[0],
                    os.path.split(lib_path)[1]), )
    else:
        logging.warning('The library %s has already been loaded' % (lib_path))
Exemple #11
0
 def testLoadFamilies(self):
     """
     Test that the loadFamilies function raises the correct exceptions
     """
     path = os.path.join(settings['database.directory'],'kinetics','families')
     database = KineticsDatabase()
     
     with self.assertRaises(DatabaseError):
         database.loadFamilies(path, families='random')
     with self.assertRaises(DatabaseError):
         database.loadFamilies(path, families=['!H_Abstraction','Disproportionation'])
     with self.assertRaises(DatabaseError):
         database.loadFamilies(path, families=['fake_family'])
     with self.assertRaises(DatabaseError):
         database.loadFamilies(path, families=[])
Exemple #12
0
 def loadOld(self, path):
     """
     Load the old RMG database from the given `path` on disk, where `path`
     points to the top-level folder of the old RMG database.
     """
     self.thermo = ThermoDatabase()
     self.thermo.loadOld(path)
     self.transport = TransportDatabase()
     #self.transport.loadOld(path)   #  Currently no loadOld import function available for transport groups
     self.forbiddenStructures = ForbiddenStructures() 
     self.forbiddenStructures.loadOld(os.path.join(path, 'ForbiddenStructures.txt'))
     self.kinetics = KineticsDatabase()
     self.kinetics.loadOld(path)
     self.statmech = StatmechDatabase()
     self.statmech.loadOld(path)        
     self.solvation = SolvationDatabase()
Exemple #13
0
 def setUpClass(cls):
     """
     A function run ONCE before all unit tests in this class.
     """
     # Set up a dummy database
     cls.database = KineticsDatabase()
     cls.database.loadFamilies(
         path=os.path.join(settings['test_data.directory'],
                           'testing_database/kinetics/families'),
         families=[
             'intra_H_migration', 'R_Addition_MultipleBond',
             'H_Abstraction', 'Intra_ene_reaction',
             '6_membered_central_C-C_shift', '1,2_shiftC',
             'Intra_R_Add_Exo_scission',
             'intra_substitutionS_isomerization', 'R_Addition_COm'
         ],
     )
     cls.family = cls.database.families['intra_H_migration']