@@ -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 )
0 commit comments