コード例 #1
0
ファイル: generateTree.py プロジェクト: pw0908/RMG-Py
def main():
    initializeLog(logging.INFO,'treegen.log')
    dbdir = settings['database.directory']
    familyName, nprocs = parse_arguments()
    database = RMGDatabase()
    database.load(
        path=dbdir,
        thermoLibraries=['Klippenstein_Glarborg2016', 'BurkeH2O2', 'thermo_DFT_CCSDTF12_BAC', 'DFT_QCI_thermo',
                           'primaryThermoLibrary', 'primaryNS', 'NitrogenCurran', 'NOx2018', 'FFCM1(-)',
                           'SulfurLibrary', 'SulfurGlarborgH2S'],
        transportLibraries=[],
        reactionLibraries=[],
        seedMechanisms=[],
        kineticsFamilies=[familyName],
        kineticsDepositories=['training'],
        # frequenciesLibraries = self.statmechLibraries,
        depository=False,  # Don't bother loading the depository information, as we don't use it
    )
    family = database.kinetics.families[familyName]
    family.cleanTree(database.thermo)
    family.generateTree(thermoDatabase=database.thermo, nprocs=min(4, nprocs))
    family.checkTree()
    family.regularize()
    templateRxnMap = family.getReactionMatches(thermoDatabase=database.thermo, removeDegeneracy=True, getReverse=True, fixLabels=True)
    family.makeBMRulesFromTemplateRxnMap(templateRxnMap, nprocs=min(6, nprocs))
    family.checkTree()
    family.save(os.path.join(dbdir,'kinetics','families',familyName))
コード例 #2
0
 def setUp(self):
     rmg_database = RMGDatabase()
     rmg_database.load(
         rmgpy.settings['database.directory'],
         kinetics_families=[
         "R_Addition_MultipleBond",
         "H_Abstraction",
         "intra_H_migration"
     ],
         transport_libraries=[],
         reaction_libraries=[],
         seed_mechanisms=[],
         thermo_libraries=[
             'primaryThermoLibrary',
             'thermo_DFT_CCSDTF12_BAC',
             'CBS_QB3_1dHR'],
         solvation=False,
     )
     self.rmg_database = rmg_database
     ts_database = TransitionStates()
     path = os.path.join(autotst.settings["tst_database_path"], "H_Abstraction")
     global_context = {'__builtins__': None}
     local_context = {'DistanceData': DistanceData}
     family = self.rmg_database.kinetics.families["H_Abstraction"]
     ts_database.family = family
     ts_database.load(path, local_context, global_context)
     self.ts_database = ts_database
コード例 #3
0
ファイル: convertPrIMe.py プロジェクト: dbaugher/RMG-database
def convertPrIMe(family):

    print 'Loading kinetics families...'
    database = RMGDatabase()
    database.kinetics = KineticsDatabase()
    database.kinetics.loadFamilies('input/kinetics/families')
    database.loadForbiddenStructures('input/forbiddenStructures.py')

    for depository in database.kinetics.families[family].depositories:
        if depository.label == '{0}/PrIMe'.format(family):
            break
    else:
        raise Exception(
            'Could not find PrIMe depository in {0} family.'.format(family))

    entries = []

    print 'Determining unique list of reactions...'
    for entry0 in depository.entries.values():
        for entry in entries:
            if entry.item.isIsomorphic(entry0.item):
                break
        else:
            entries.append(entry0)
    print 'Found {0:d} unique reactions out of {1:d} entries.'.format(
        len(entries), len(depository.entries))

    print 'Sorting unique reactions...'
    entries.sort(key=lambda entry: sum([
        1 for r in entry.item.reactants for a in r.atoms if a.isNonHydrogen()
    ]))

    print 'Saving reactions...'
    for index, entry in enumerate(entries):

        label = entry.label
        reaction = entry.item

        # Determine degeneracy in both directions
        reactions = database.kinetics.generateReactionsFromFamilies(
            reaction.reactants, reaction.products, only_families=[family])
        if len(reactions) != 1:
            print 'Warning: could not determine forward degeneracy for reaction #{0:d}.'.format(
                index + 1)
            forwardDegeneracy = 1
        else:
            forwardDegeneracy = reactions[0].degeneracy
        reactions = database.kinetics.generateReactionsFromFamilies(
            reaction.products, reaction.reactants, only_families=[family])
        if len(reactions) != 1:
            print 'Warning: could not determine reverse degeneracy for reaction #{0:d}.'.format(
                index + 1)
            reverseDegeneracy = 1
        else:
            reverseDegeneracy = reactions[0].degeneracy

        saveReaction(
            'input/kinetics/families/{0}/training/{0}.py'.format(
                family, index + 1), index + 1, label, reaction,
            forwardDegeneracy, reverseDegeneracy)
コード例 #4
0
    def setUpClass(cls):
        """This method is run once before all tests in this class."""
        test_dir = rmgpy.settings['test_data.directory']

        data_dir = os.path.join(test_dir, 'testing_database')
        chem_dir = os.path.join(test_dir, 'parsing_data')
        chemkin_file = os.path.join(chem_dir, 'chem_annotated.inp')
        spc_dict = os.path.join(chem_dir, 'species_dictionary.txt')

        cls.uncertainty = Uncertainty(outputDirectory='chemDir')
        cls.uncertainty.loadModel(chemkin_file, spc_dict)

        # load database properly
        cls.uncertainty.database = RMGDatabase()
        cls.uncertainty.database.load(
            data_dir,
            kineticsFamilies='all',
            kineticsDepositories=['training'],
            thermoLibraries=['primaryThermoLibrary'],
            reactionLibraries=['GRI-Mech3.0'],
        )

        # Prepare the database by loading training reactions and averaging the rate rules verbosely
        for family in cls.uncertainty.database.kinetics.families.itervalues():
            family.addKineticsRulesFromTrainingSet(
                thermoDatabase=cls.uncertainty.database.thermo)
            family.fillKineticsRulesByAveragingUp(verbose=True)
コード例 #5
0
 def loadDatabase(self, kineticsFamilies='all',kineticsDepositories=None,thermoLibraries=None, reactionLibraries=None):
     """
     This function loads a single copy of the RMGDatabase with full verbose averaging
     of the rate rule to trace kinetics sources.  
     
     By default, this function loads all the kinetics families, only the training kinetics depository,
     the primaryThermoLibrary, and no reaction libraries.  
     """
     from rmgpy.data.rmg import RMGDatabase 
     from rmgpy import settings
     
     if not kineticsDepositories:
         kineticsDepositories = ['training']
     if not thermoLibraries:
         thermoLibraries = ['primaryThermoLibrary']
     if not reactionLibraries:
         reactionLibraries = []
         
         
     self.database = RMGDatabase()
     self.database.load(settings['database.directory'], 
                       kineticsFamilies=kineticsFamilies, 
                       kineticsDepositories=kineticsDepositories,
                       thermoLibraries=thermoLibraries,
                       reactionLibraries=reactionLibraries,
                       )
     
 
     # Prepare the database by loading training reactions but not averaging the rate rules
     for familyLabel, family in self.database.kinetics.families.iteritems():
         family.addKineticsRulesFromTrainingSet(thermoDatabase=self.database.thermo)
     
         family.fillKineticsRulesByAveragingUp(verbose=True)
コード例 #6
0
ファイル: kineticsTest.py プロジェクト: yplitw/RMG-Py
def setUpModule():
    """A function that is run ONCE before all unit tests in this module."""
    global database
    database = RMGDatabase()
    database.load(
        path=os.path.join(settings['test_data.directory'], 'testing_database'),
        thermoLibraries=['primaryThermoLibrary'],
        reactionLibraries=['GRI-Mech3.0'],
        kineticsFamilies=[
            'R_Recombination', 'Disproportionation', 'R_Addition_MultipleBond',
            'H_Abstraction'
        ],
        testing=True,
        depository=False,
        solvation=False,
    )
    #load empty forbidden structures to avoid any dependence on forbidden structures
    #for these tests
    for family in database.kinetics.families.values():
        family.forbidden = ForbiddenStructures()
    database.forbiddenStructures = ForbiddenStructures()

    # Prepare the database by loading training reactions and averaging the rate rules
    for family in database.kinetics.families.values():
        family.addKineticsRulesFromTrainingSet(thermoDatabase=database.thermo)
        family.fillKineticsRulesByAveragingUp(verbose=True)
コード例 #7
0
def simple_react(n_cp, n_iter):
    # load RMG database to create reactions
    database = RMGDatabase()

    database.load(
        path=settings['database.directory'],
        thermoLibraries=['primaryThermoLibrary'
                         ],  # can add others if necessary
        kineticsFamilies='all',
        reactionLibraries=[],
        kineticsDepositories='')

    kinetics_db = database.kinetics
    mol0 = Molecule().fromSMILES('CCCCCCCCC1CCCc2ccccc21')

    mol1 = Molecule().fromSMILES('CCCCCCCCC1CCCC2C=CC=CC=21')

    mol_tuple = (mol0, mol1)

    reactions = []
    for i in range(n_iter):
        mol_tuples = [mol_tuple] * n_cp
        results = map_(react_molecules_wrapper, mol_tuples)

        reactions_iter = itertools.chain.from_iterable(results)
        print "{0} iter: {1} reactions.".format(i, len(list(reactions_iter)))
コード例 #8
0
ファイル: familyTest.py プロジェクト: qize/RMG-Py
    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)
コード例 #9
0
 def setUpClass(cls):
     """
     Load the database before running the tests.
     """
     databaseDirectory = settings['database.directory']
     cls.database = RMGDatabase()
     cls.database.load(databaseDirectory, kineticsFamilies='all')
コード例 #10
0
    def setUpClass(cls):
        """This method is run once before all tests in this class."""
        test_dir = rmgpy.settings['test_data.directory']

        data_dir = os.path.join(test_dir, 'testing_database')
        chem_dir = os.path.join(test_dir, 'parsing_data')
        chemkin_file = os.path.join(chem_dir, 'chem_annotated.inp')
        spc_dict = os.path.join(chem_dir, 'species_dictionary.txt')

        cls.uncertainty = Uncertainty(outputDirectory='chemDir')
        cls.uncertainty.loadModel(chemkin_file, spc_dict)

        # load database properly
        cls.uncertainty.database = RMGDatabase()
        cls.uncertainty.database.load(
            data_dir,
            kineticsFamilies=[
                '1,2_shiftC', '6_membered_central_C-C_shift',
                'Disproportionation', 'H_Abstraction', 'Intra_ene_reaction',
                'intra_H_migration', 'Intra_R_Add_Exo_scission',
                'intra_substitutionS_isomerization', 'R_Addition_MultipleBond',
                'R_Recombination'
            ],
            kineticsDepositories=['training'],
            thermoLibraries=['primaryThermoLibrary'],
            reactionLibraries=['GRI-Mech3.0'],
        )

        # Prepare the database by loading training reactions and averaging the rate rules verbosely
        for family in cls.uncertainty.database.kinetics.families.itervalues():
            family.addKineticsRulesFromTrainingSet(
                thermoDatabase=cls.uncertainty.database.thermo)
            family.fillKineticsRulesByAveragingUp(verbose=True)
コード例 #11
0
def load():
    tearDown()
    rmg = RMG()#for solvent
    database = RMGDatabase()
    database.loadThermo(os.path.join(settings['database.directory'], 'thermo'))
    database.loadTransport(os.path.join(settings['database.directory'], 'transport'))
    database.loadSolvation(os.path.join(settings['database.directory'], 'solvation'))
コード例 #12
0
def main():
    initialize_log(logging.INFO, 'treegen.log')
    dbdir = settings['database.directory']
    family_name = parse_arguments()
    database = RMGDatabase()
    database.load(
        path=dbdir,
        thermo_libraries=['Klippenstein_Glarborg2016', 'BurkeH2O2', 'thermo_DFT_CCSDTF12_BAC', 'DFT_QCI_thermo',
                         'primaryThermoLibrary', 'primaryNS', 'NitrogenCurran', 'NOx2018', 'FFCM1(-)',
                         'SulfurLibrary', 'SulfurGlarborgH2S', 'SABIC_aromatics'],
        transport_libraries=[],
        reaction_libraries=[],
        seed_mechanisms=[],
        kinetics_families=[family_name],
        kinetics_depositories=['training'],
        # frequenciesLibraries = self.statmechLibraries,
        depository=False,  # Don't bother loading the depository information, as we don't use it
    )
    family = database.kinetics.families[family_name]
    num_training_rxns = len(family.get_training_depository().entries)
    max_batch_size = 800
    family.clean_tree()
    if (num_training_rxns/max_batch_size > 1) and (num_training_rxns/max_batch_size <= 1.3):
        family.generate_tree(thermo_database=database.thermo, nprocs=1, max_batch_size=num_training_rxns)
    else:
        family.generate_tree(thermo_database=database.thermo, nprocs=1) 
    family.check_tree()
    family.regularize()
    template_rxn_map = family.get_reaction_matches(thermo_database=database.thermo, remove_degeneracy=True,
                                                   get_reverse=True, fix_labels=True)
    family.make_bm_rules_from_template_rxn_map(template_rxn_map, nprocs=1)
    family.check_tree()
    family.save(os.path.join(dbdir, 'kinetics', 'families', family_name))
コード例 #13
0
ファイル: familyTest.py プロジェクト: z5476t4508/RMG-Py
    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']
コード例 #14
0
ファイル: thermoTest.py プロジェクト: dbaugher/RMG-Py
    def testGetRingGroupsFromComments(self):
        """
        Test that getRingGroupsFromComments method works for fused polycyclics.
        """
        from rmgpy.thermo.thermoengine import generateThermoData

        # set-up RMG object
        rmg = RMG()

        # load kinetic database and forbidden structures
        rmg.database = RMGDatabase()
        path = os.path.join(settings['database.directory'])

        # forbidden structure loading
        rmg.database.loadThermo(os.path.join(path, 'thermo'))

        smi = 'C12C(C3CCC2C3)C4CCC1C4'  #two norbornane rings fused together
        spc = Species().fromSMILES(smi)

        spc.thermo = generateThermoData(spc)

        thermodb = rmg.database.thermo
        thermodb.getRingGroupsFromComments(spc.thermo)

        import rmgpy.data.rmg
        rmgpy.data.rmg.database = None
コード例 #15
0
def loadDatabase():
    print 'Loading RMG database...'
    from rmgpy.data.rmg import RMGDatabase
    database = RMGDatabase()
    database.load(settings['database.directory'],
                  kineticsFamilies='all',
                  kineticsDepositories='all')
    return database
コード例 #16
0
ファイル: input.py プロジェクト: sleepyguyallday/RMG-Py
def database(
             thermoLibraries = None,
             transportLibraries = None,
             reactionLibraries = None,
             frequenciesLibraries = None,
             kineticsFamilies = 'default',
             kineticsDepositories = 'default',
             kineticsEstimator = 'rate rules',
             ):
    if isinstance(thermoLibraries, str):
        thermoLibraries = [thermoLibraries]
    if isinstance(transportLibraries, str):
        transportLibraries = [transportLibraries]
    if isinstance(reactionLibraries, str):
        reactionLibraries = [reactionLibraries]
    if isinstance(frequenciesLibraries, str):
        frequenciesLibraries = [frequenciesLibraries]
    
    databaseDirectory = settings['database.directory']
    thermoLibraries = thermoLibraries or []
    transportLibraries = transportLibraries
    reactionLibraries = reactionLibraries or []
    kineticsEstimator = kineticsEstimator
    
    if kineticsDepositories == 'default':
        kineticsDepositories = ['training']
    elif kineticsDepositories == 'all':
        kineticsDepositories = None
    else:
        if not isinstance(kineticsDepositories,list):
            raise InputError("kineticsDepositories should be either 'default', 'all', or a list of names eg. ['training','PrIMe'].")
        kineticsDepositories = kineticsDepositories

    if kineticsFamilies in ('default', 'all', 'none'):
        kineticsFamilies = kineticsFamilies
    else:
        if not isinstance(kineticsFamilies,list):
            raise InputError("kineticsFamilies should be either 'default', 'all', 'none', or a list of names eg. ['H_Abstraction','R_Recombination'] or ['!Intra_Disproportionation'].")
        kineticsFamilies = kineticsFamilies

    database = getDB() or RMGDatabase()

    database.load(
            path = databaseDirectory,
            thermoLibraries = thermoLibraries,
            transportLibraries = transportLibraries,
            reactionLibraries = reactionLibraries,
            seedMechanisms = [],
            kineticsFamilies = kineticsFamilies,
            kineticsDepositories = kineticsDepositories,
            depository = False, # Don't bother loading the depository information, as we don't use it
        )
    
    for family in database.kinetics.families.values(): #load training
        family.addKineticsRulesFromTrainingSet(thermoDatabase=database.thermo)

    for family in database.kinetics.families.values():
        family.fillKineticsRulesByAveragingUp(verbose=True)
コード例 #17
0
ファイル: updater_methods.py プロジェクト: rwest/AutoTST
def TS_Database_Update(families, path=None, auto_save=False):
    """
    Expects list of reaction families

    Loads RMG Databse,
    Creaes instance of TS_updater for each reaction family in families,

    Return dictionary of family:family's instance of the updater
    """

    assert isinstance(
        families, list
    ), "Families must be a list. If singular family, still keep it in list"
    acceptable_families = os.listdir(
        os.path.join(os.path.expandvars("$RMGpy"), "..", "AutoTST",
                     "database"))
    for family in families:
        assert isinstance(family,
                          str), "Family names must be provided as strings"
        if family.upper() not in (family.upper()
                                  for family in acceptable_families):
            logging.warning(
                '"{}" is not a known Kinetics Family'.format(family))
            families.remove(family)

    logging.info("Loading RMG Database...")
    rmg_database = RMGDatabase()
    database_path = os.path.join(os.path.expandvars('$RMGpy'), "..",
                                 'RMG-database', 'input')

    try:
        rmg_database.load(
            database_path,
            # kineticsFamilies=['H_Abstraction'],
            kineticsFamilies=families,
            transportLibraries=[],
            reactionLibraries=[],
            seedMechanisms=[],
            thermoLibraries=[
                'primaryThermoLibrary', 'thermo_DFT_CCSDTF12_BAC',
                'CBS_QB3_1dHR'
            ],
            solvation=False,
        )
    except:
        logging.error(
            "Failed to Load RMG Database at {}".format(database_path))

    Databases = {
        family: TS_Updater(family, rmg_database, path=path)
        for family in families
    }

    if auto_save == True:
        save_all_individual_databases(Databases)

    return Databases
コード例 #18
0
ファイル: rmgdb.py プロジェクト: rvkmr1989/ARC
def make_rmg_database_object():
    """
    Make a clean RMGDatabase object.

    Returns: RMGDatabase
        A clean RMG database object.
    """
    rmgdb = RMGDatabase()
    return rmgdb
コード例 #19
0
def main(dictionary):

    database = RMGDatabase()
    database.loadTransport(path=os.path.join(settings['database.directory'],
                                             'transport'),
                           transportLibraries=None)

    speciesDict = loadSpeciesDictionary(dictionary)

    saveTransportFile('tran.dat', speciesDict.values())
コード例 #20
0
def database(thermoLibraries=None,
             transportLibraries=None,
             reactionLibraries=None,
             frequenciesLibraries=None,
             kineticsFamilies='default',
             kineticsDepositories='default',
             kineticsEstimator='rate rules'):
    """Load the RMG database"""
    thermo_libraries = as_list(thermoLibraries, default=[])
    transport_libraries = as_list(transportLibraries, default=None)
    reaction_libraries = as_list(reactionLibraries, default=[])

    database_directory = settings['database.directory']

    if kineticsDepositories == 'default':
        kinetics_depositories = ['training']
    elif kineticsDepositories == 'all':
        kinetics_depositories = None
    else:
        if not isinstance(kineticsDepositories, list):
            raise InputError(
                "kinetics_depositories should be either 'default', 'all', or a list of names eg. ['training','PrIMe']."
            )
        kinetics_depositories = kineticsDepositories

    if kineticsFamilies in ('default', 'all', 'none'):
        kinetics_families = kineticsFamilies
    else:
        if not isinstance(kineticsFamilies, list):
            raise InputError(
                "kineticsFamilies should be either 'default', 'all', 'none', or a list of names eg. "
                "['H_Abstraction','R_Recombination'] or ['!Intra_Disproportionation']."
            )
        kinetics_families = kineticsFamilies

    rmg_database = get_db() or RMGDatabase()

    rmg_database.load(
        path=database_directory,
        thermo_libraries=thermo_libraries,
        transport_libraries=transport_libraries,
        reaction_libraries=reaction_libraries,
        seed_mechanisms=[],
        kinetics_families=kinetics_families,
        kinetics_depositories=kinetics_depositories,
        depository=
        False,  # Don't bother loading the depository information, as we don't use it
    )

    for family in rmg_database.kinetics.families.values():  # load training
        if not family.auto_generated:
            family.add_rules_from_training(thermo_database=rmg_database.thermo)

    for family in rmg_database.kinetics.families.values():
        family.fill_rules_by_averaging_up(verbose=True)
コード例 #21
0
 def __init__(self):
     self.database = RMGDatabase()
     self.database.kinetics = KineticsDatabase()
     self.database.thermo = ThermoDatabase()
     self.database.transport = TransportDatabase()
     self.database.statmech = StatmechDatabase()
     self.database.solvation = SolvationDatabase()
     self.database.load_forbidden_structures(
         os.path.join(rmgweb.settings.DATABASE_PATH,
                      'forbiddenStructures.py'))
     self.timestamps = {}
コード例 #22
0
def loadDatabase(args):

    print 'Loading RMG database...'
    from rmgpy.data.rmg import RMGDatabase
    rmgDatabase = RMGDatabase()
    rmgDatabase.load('/Users/belinda/Code/RMG-database/input',
                     kineticsFamilies=args.family)

    rxnFamily = rmgDatabase.kinetics.families[args.family[0]]
    database = rxnFamily.solvationCorrections

    return database, rmgDatabase
コード例 #23
0
    def setUpClass(cls):
        """
        A method that is run before each unit test in this class.
        """
        # set-up RMG object
        cls.rmg = RMG()

        # load kinetic database and forbidden structures
        cls.rmg.database = RMGDatabase()
        path = os.path.join(settings['database.directory'])

        # forbidden structure loading
        cls.rmg.database.load_thermo(os.path.join(path, 'thermo'))
コード例 #24
0
def export(input, output, database=None):

    print 'Loading the new RMG-Py database...'
    if not database:
        database = RMGDatabase()
    database.load(input)

    print 'Constructing additional rate rules from kinetics depository...'
    for family in database.kinetics.families.values():
        generateRules(family, database)

    print 'Saving old RMG-Java database...'
    database.saveOld(output)
コード例 #25
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=['H_Abstraction'],
         depository=False,
         solvation=False,
         testing=True,
     )
     cls.database.loadForbiddenStructures()
コード例 #26
0
    def test_to_wilhoit(self):
        """
        Test if the entropy computed from other thermo implementations is close to what Wilhoit computes.
        """

        from rmgpy import settings
        from rmgpy.data.rmg import RMGDatabase
        from rmgpy.species import Species

        # Load databases
        database = RMGDatabase()
        database.load_thermo(os.path.join(settings['database.directory'],
                                          'thermo'),
                             thermo_libraries=['Narayanaswamy'])
        database.load_solvation(
            os.path.join(settings['database.directory'], 'solvation'))

        spc = Species().from_smiles('CC')
        spc.get_thermo_data()

        T = 1350.  # not 298K!

        # nasa to wilhoit
        nasa = spc.thermo
        s_nasa = nasa.get_entropy(T)

        nasa_to_wh = nasa.to_wilhoit()
        s_nasa_to_wh = nasa_to_wh.get_entropy(T)

        self.assertAlmostEqual(s_nasa, s_nasa_to_wh, -1)
        self.assertEqual(nasa.comment, nasa_to_wh.comment)

        # wilhoit to nasa conversion done in nasaTest.py

        # thermo data to wilhoit:
        td = nasa.to_thermo_data()
        s_td = td.get_entropy(T)

        wilhoit = td.to_wilhoit(B=1000.)
        s_wh = wilhoit.get_entropy(T)

        self.assertAlmostEqual(s_td, s_wh, -1)
        self.assertEqual(td.comment, wilhoit.comment)

        # wilhoit back to thermodata
        td = wilhoit.to_thermo_data()
        s_td = td.get_entropy(T)

        self.assertAlmostEqual(s_td, s_wh, -1)
        self.assertEqual(td.comment, wilhoit.comment)
コード例 #27
0
def database_setup():
    # load RMG database to create reactions
    database = RMGDatabase()

    database.load(
        path = settings['database.directory'], 
        thermoLibraries = ['primaryThermoLibrary'], # can add others if necessary
        kineticsFamilies = 'all', 
        reactionLibraries = [], 
        kineticsDepositories = ''
    )

    thermodb = database.thermo
    print thermodb.libraries.keys()
コード例 #28
0
ファイル: familyTest.py プロジェクト: shenghuiqin/RMG-Py
 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=['H_Abstraction', 'R_Addition_MultipleBond', 'Singlet_Val6_to_triplet', 'R_Recombination',
                           'Baeyer-Villiger_step1_cat', 'Surface_Adsorption_Dissociative', 'Surface_Dissociation_vdW'],
         depository=False,
         solvation=False,
         testing=True,
     )
     cls.database.loadForbiddenStructures()
コード例 #29
0
def export(input, output, database=None):

    print 'Loading the new RMG-Py database...'
    if not database:
        database = RMGDatabase()
    database.load(input, kineticsFamilies='all', kineticsDepositories='all')

    print 'Constructing additional rate rules from kinetics depository...'
    for family in database.kinetics.families.values():
        family.addKineticsRulesFromTrainingSet(thermoDatabase=database.thermo)

    print "Deleting thermo library entries with atoms RMG-Java can't understand..."
    database.thermo.pruneHeteroatoms(allowed=['C', 'H', 'O', 'S'])
    print 'Saving old RMG-Java database...'
    database.saveOld(output)
    print "Done!"
コード例 #30
0
ファイル: tools.py プロジェクト: jabrownmit/RMG-website
def loadDatabase(component='', section=''):
    """
    Load the requested `component` of the RMG database if modified since last loaded.
    """
    global database
    if not database:
        database = RMGDatabase()
        database.thermo = ThermoDatabase()
        database.kinetics = KineticsDatabase()
        database.loadForbiddenStructures(os.path.join(settings.DATABASE_PATH, 'forbiddenStructures.py'))

    if component in ['thermo', '']:
        if section in ['depository', '']:
            dirpath = os.path.join(settings.DATABASE_PATH, 'thermo', 'depository')
            if isDirModified(dirpath):
                database.thermo.loadDepository(dirpath)
                resetDirTimestamps(dirpath)
        if section in ['libraries', '']:
            dirpath = os.path.join(settings.DATABASE_PATH, 'thermo', 'libraries')
            if isDirModified(dirpath):
                database.thermo.loadLibraries(dirpath)
                # put them in our preferred order, so that when we look up thermo in order to estimate kinetics,
                # we use our favourite values first.
                preferred_order = ['primaryThermoLibrary','DFT_QCI_thermo','GRI-Mech3.0','CBS_QB3_1dHR','KlippensteinH2O2']
                new_order = [i for i in preferred_order if i in database.thermo.libraryOrder]
                for i in database.thermo.libraryOrder:
                    if i not in new_order: new_order.append(i) 
                database.thermo.libraryOrder = new_order
                resetDirTimestamps(dirpath)
        if section in ['groups', '']:
            dirpath = os.path.join(settings.DATABASE_PATH, 'thermo', 'groups')
            if isDirModified(dirpath):
                database.thermo.loadGroups(dirpath)
                resetDirTimestamps(dirpath)
    if component in ['kinetics', '']:
        if section in ['libraries', '']:
            dirpath = os.path.join(settings.DATABASE_PATH, 'kinetics', 'libraries')
            if isDirModified(dirpath):
                database.kinetics.loadLibraries(dirpath)
                resetDirTimestamps(dirpath)
        if section in ['families', '']:
            dirpath = os.path.join(settings.DATABASE_PATH, 'kinetics', 'families')
            if isDirModified(dirpath):
                database.kinetics.loadFamilies(dirpath)
                resetDirTimestamps(dirpath)

    return database