def assessReaction(rxn, reactionSystems, tolerance, data): """ Returns whether the reaction is important or not in the reactions. It iterates over the reaction systems, and loads the concentration profile of each reaction system. It iterates over a number of samples in profile and evaluates the importance of the reaction at every sample. """ logging.debug('Assessing reaction {}'.format(rxn)) reactions = retrieveReactions() # read in the intermediate state variables for datum, reactionSystem in zip(data, reactionSystems): T, P = reactionSystem.T.value_si, reactionSystem.P.value_si speciesNames, profile = datum # take N evenly spaced indices from the table with simulation results: """ Number of time steps between start and end time of the batch reactor simulation at which the importance of reactions should be evaluated. The more timesteps, the less chance we have to remove an important reactions, but the more simulations need to be carried out. """ timesteps = len(profile) / 2 logging.debug('Evaluating the importance of a reaction at {} time samples.'.format(timesteps)) assert timesteps <= len(profile) indices = map(int, np.linspace(0, len(profile)-1, num = timesteps)) for index in indices: assert profile[index] is not None timepoint, coreSpeciesConcentrations = profile[index] coreSpeciesConcentrations = {key: float(value) for (key, value) in zip(speciesNames, coreSpeciesConcentrations)} for species_i in rxn.reactants: if isImportant(rxn, species_i, reactions, 'reactant', tolerance, T, P, coreSpeciesConcentrations): return True #only continue if the reaction is not important yet. for species_i in rxn.products: if isImportant(rxn, species_i, reactions, 'product', tolerance, T, P, coreSpeciesConcentrations): return True return False