Algorithms for the constraint-based analysis of metabolic networks