Skip to content

Commit 43188d0

Browse files
authored
Merge pull request #740 from ReactionMechanismGenerator/verboseComments
Fix and re-add verbose comments back to RMG
2 parents 5920f9a + b53d9f6 commit 43188d0

File tree

3 files changed

+26
-16
lines changed

3 files changed

+26
-16
lines changed

rmgpy/data/kinetics/family.py

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1037,13 +1037,13 @@ def getRootTemplate(self):
10371037
else:
10381038
return self.groups.top
10391039

1040-
def fillKineticsRulesByAveragingUp(self):
1040+
def fillKineticsRulesByAveragingUp(self, verbose=False):
10411041
"""
10421042
Fill in gaps in the kinetics rate rules by averaging child nodes
10431043
recursively starting from the top level root template.
10441044
"""
10451045

1046-
self.rules.fillRulesByAveragingUp(self.getRootTemplate(), {})
1046+
self.rules.fillRulesByAveragingUp(self.getRootTemplate(), {}, verbose)
10471047

10481048

10491049

rmgpy/data/kinetics/rules.py

Lines changed: 23 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -440,9 +440,11 @@ def getAllRules(self, template):
440440

441441
return entries
442442

443-
def fillRulesByAveragingUp(self, rootTemplate, alreadyDone):
443+
def fillRulesByAveragingUp(self, rootTemplate, alreadyDone, verbose=False):
444444
"""
445445
Fill in gaps in the kinetics rate rules by averaging child nodes.
446+
If verbose is set to True, then exact sources of kinetics are saved in the kinetics comments
447+
(warning: this uses up a lot of memory due to the extensively long comments)
446448
"""
447449
rootLabel = ';'.join([g.label for g in rootTemplate])
448450

@@ -472,7 +474,7 @@ def fillRulesByAveragingUp(self, rootTemplate, alreadyDone):
472474
if label in alreadyDone:
473475
kinetics = alreadyDone[label]
474476
else:
475-
kinetics = self.fillRulesByAveragingUp(template, alreadyDone)
477+
kinetics = self.fillRulesByAveragingUp(template, alreadyDone, verbose)
476478

477479
if kinetics is not None:
478480
kineticsList.append([kinetics, template])
@@ -494,26 +496,27 @@ def fillRulesByAveragingUp(self, rootTemplate, alreadyDone):
494496
if len(kineticsList) > 1:
495497
# We found one or more results! Let's average them together
496498
kinetics = self.__getAverageKinetics([k for k, t in kineticsList])
497-
kinetics.comment = 'Average of ({0})'.format(
498-
' + '.join(';'.join(g.label for g in t) for k, t in kineticsList))
499499

500-
# For debug mode: uncomment the following kinetics commenting
501-
# lines and use them instead of the lines above. Caution: large memory usage.
502-
503-
# kinetics.comment += 'Average of ({0})'.format(
504-
# ' + '.join(k.comment if k.comment != '' else ';'.join(g.label for g in t) for k, t in kineticsList))
500+
if verbose:
501+
kinetics.comment = 'Average of ({0})'.format(
502+
' + '.join(k.comment if k.comment != '' else ';'.join(g.label for g in t) for k, t in kineticsList))
503+
504+
else:
505+
kinetics.comment = 'Average of ({0})'.format(
506+
' + '.join(';'.join(g.label for g in t) for k, t in kineticsList))
505507

506508
else:
507509
k,t = kineticsList[0]
508510
kinetics = deepcopy(k)
509511
# Even though we are using just a single set of kinetics, it's still considered
510512
# an average. It just happens that the other distance 1 children had no data.
511-
kinetics.comment = 'Average of ({0})'.format(';'.join(g.label for g in t))
512513

513-
# For debug mode: uncomment the following kinetics commenting
514-
# lines and use them instead of the lines above. Caution: large memory usage.
514+
if verbose:
515+
kinetics.comment = 'Average of ({0})'.format(k.comment if k.comment != '' else ';'.join(g.label for g in t))
516+
else:
517+
kinetics.comment = 'Average of ({0})'.format(';'.join(g.label for g in t))
518+
515519

516-
# kinetics.comment += 'Average of ({0}).format(k.comment if k.comment != '' else ';'.join(g.label for g in t))
517520

518521
entry = Entry(
519522
index = 0,
@@ -633,6 +636,13 @@ def getTemplateLabel(template):
633636
else:
634637
# We found one or more results! Let's average them together
635638
kinetics = self.__getAverageKinetics([k for k, t in kineticsList])
639+
# Unlike in the case of a single rule, the verbose comments for averaging are lost unless they are
640+
# appended in the following lines. Verbose comments are filtered out in
641+
# rmgpy.rmg.model.CoreEdgeReactionModel.generateKinetics
642+
kinetics.comment = 'Average of ({0})'.format(
643+
' + '.join(k.comment if k.comment != '' else ';'.join(g.label for g in t) for k, t in kineticsList))
644+
kinetics.comment +='\n'
645+
# Append standard portion of kinetics comments that appear in non-verbose mode.
636646
kinetics.comment += 'Estimated using average of templates {0}'.format(
637647
' + '.join([getTemplateLabel(t) for k, t in kineticsList]),
638648
)

rmgpy/rmg/main.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -322,7 +322,7 @@ def loadDatabase(self):
322322
logging.info('Training set explicitly not added to rate rules in kinetics families...')
323323
logging.info('Filling in rate rules in kinetics families by averaging...')
324324
for family in self.database.kinetics.families.values():
325-
family.fillKineticsRulesByAveragingUp()
325+
family.fillKineticsRulesByAveragingUp(verbose=self.verboseComments)
326326

327327
def initialize(self, **kwargs):
328328
"""

0 commit comments

Comments
 (0)