Functions chooseData and chooseEnData from ClmImpure.ReactionRateFunctions may produce statistical collisions (similar to birthday problem or hash function collisions) with the main reaction at the call site. In principle, this is fine. However, there is one mode of operations where the system explicitly tries to eliminate all collisions so that to have the number of successes exactly as claimed. With that in mind it seems reasonable to update the code to support similar functionality at the level of this functions or at the call sites.
Here are the difficulties:
- In contrast to e.g.
generatePairs and generateTriples the functions above get as input a list of some abstract objects, elements of which cannot be easily (if at all) compared to the primary object (reaction or catalyst) at the call site. And even if they could be compared (by using some projection operator), this won't do any good as we cannot remove the element from the list based on projection. Ligation reaction is a good example: we pick all reactions with the same bond type symmetry. This covers a lot of reactions including all reactions with exactly the same bond as the chosen one. However, the collision is only with just one reaction - that chosen one.
- Parameters to control collision must be propagated all the way through.
In other words, this seems like a nice to have feature. However, the efforts could be significant.
Functions
chooseDataandchooseEnDatafromClmImpure.ReactionRateFunctionsmay produce statistical collisions (similar to birthday problem or hash function collisions) with the main reaction at the call site. In principle, this is fine. However, there is one mode of operations where the system explicitly tries to eliminate all collisions so that to have the number of successes exactly as claimed. With that in mind it seems reasonable to update the code to support similar functionality at the level of this functions or at the call sites.Here are the difficulties:
generatePairsandgenerateTriplesthe functions above get as input a list of some abstract objects, elements of which cannot be easily (if at all) compared to the primary object (reaction or catalyst) at the call site. And even if they could be compared (by using some projection operator), this won't do any good as we cannot remove the element from the list based on projection. Ligation reaction is a good example: we pick all reactions with the same bond type symmetry. This covers a lot of reactions including all reactions with exactly the same bond as the chosen one. However, the collision is only with just one reaction - that chosen one.In other words, this seems like a nice to have feature. However, the efforts could be significant.