def loadRMGJavaJob(inputFile, chemkinFile=None, speciesDict=None): """ Load the results of an RMG-Java job generated from the given `inputFile`. """ from rmgpy.molecule import Molecule # Load the specified RMG-Java input file # This implementation only gets the information needed to generate flux diagrams rmg = RMG() rmg.loadRMGJavaInput(inputFile) rmg.outputDirectory = os.path.abspath(os.path.dirname(inputFile)) # Load the final Chemkin model generated by RMG-Java if not chemkinFile: chemkinFile = os.path.join(os.path.dirname(inputFile), 'chemkin', 'chem.inp') if not speciesDict: speciesDict = os.path.join(os.path.dirname(inputFile), 'RMG_Dictionary.txt') speciesList, reactionList = loadChemkinFile(chemkinFile, speciesDict) # Bath gas species don't appear in RMG-Java species dictionary, so handle # those as a special case for species in speciesList: if species.label == 'Ar': species.molecule = [Molecule().fromSMILES('[Ar]')] elif species.label == 'Ne': species.molecule = [Molecule().fromSMILES('[Ne]')] elif species.label == 'He': species.molecule = [Molecule().fromSMILES('[He]')] elif species.label == 'N2': species.molecule = [Molecule().fromSMILES('N#N')] # Map species in input file to corresponding species in Chemkin file speciesDict = {} for spec0 in rmg.initialSpecies: for species in speciesList: if species.isIsomorphic(spec0): speciesDict[spec0] = species break # Generate flux pairs for each reaction if needed for reaction in reactionList: if not reaction.pairs: reaction.generatePairs() # Replace species in input file with those in Chemkin file for reactionSystem in rmg.reactionSystems: reactionSystem.initialMoleFractions = dict([ (speciesDict[spec], frac) for spec, frac in reactionSystem.initialMoleFractions.iteritems() ]) for t in reactionSystem.termination: if isinstance(t, TerminationConversion): if t.species not in speciesDict.values(): t.species = speciesDict[t.species] # Set reaction model to match model loaded from Chemkin file rmg.reactionModel.core.species = speciesList rmg.reactionModel.core.reactions = reactionList # RMG-Java doesn't generate species images, so draw them ourselves now speciesPath = os.path.join(os.path.dirname(inputFile), 'species') try: os.mkdir(speciesPath) except OSError: pass for species in speciesList: path = os.path.join(speciesPath + '/{0!s}.png'.format(species)) species.molecule[0].draw(str(path)) return rmg
def loadRMGJavaJob(inputFile, chemkinFile=None, speciesDict=None): """ Load the results of an RMG-Java job generated from the given `inputFile`. """ from rmgpy.molecule import Molecule # Load the specified RMG-Java input file # This implementation only gets the information needed to generate flux diagrams rmg = RMG() rmg.loadRMGJavaInput(inputFile) rmg.outputDirectory = os.path.abspath(os.path.dirname(inputFile)) # Load the final Chemkin model generated by RMG-Java if not chemkinFile: chemkinFile = os.path.join(os.path.dirname(inputFile), 'chemkin', 'chem.inp') if not speciesDict: speciesDict = os.path.join(os.path.dirname(inputFile), 'RMG_Dictionary.txt') speciesList, reactionList = loadChemkinFile(chemkinFile, speciesDict) # Bath gas species don't appear in RMG-Java species dictionary, so handle # those as a special case for species in speciesList: if species.label == 'Ar': species.molecule = [Molecule().fromSMILES('[Ar]')] elif species.label == 'Ne': species.molecule = [Molecule().fromSMILES('[Ne]')] elif species.label == 'He': species.molecule = [Molecule().fromSMILES('[He]')] elif species.label == 'N2': species.molecule = [Molecule().fromSMILES('N#N')] # Map species in input file to corresponding species in Chemkin file speciesDict = {} for spec0 in rmg.initialSpecies: for species in speciesList: if species.isIsomorphic(spec0): speciesDict[spec0] = species break # Generate flux pairs for each reaction if needed for reaction in reactionList: if not reaction.pairs: reaction.generatePairs() # Replace species in input file with those in Chemkin file for reactionSystem in rmg.reactionSystems: reactionSystem.initialMoleFractions = dict([(speciesDict[spec], frac) for spec, frac in reactionSystem.initialMoleFractions.iteritems()]) for t in reactionSystem.termination: if isinstance(t, TerminationConversion): if t.species not in speciesDict.values(): t.species = speciesDict[t.species] # Set reaction model to match model loaded from Chemkin file rmg.reactionModel.core.species = speciesList rmg.reactionModel.core.reactions = reactionList # RMG-Java doesn't generate species images, so draw them ourselves now speciesPath = os.path.join(os.path.dirname(inputFile), 'species') try: os.mkdir(speciesPath) except OSError: pass for species in speciesList: path = os.path.join(speciesPath + '/{0!s}.png'.format(species)) species.molecule[0].draw(str(path)) return rmg